提升弹性[MoreLikeThis]搜索查询开始数组

Vla*_*mir 6 elasticsearch elasticsearch-2.0

我有弹性搜索文档,结构如下:

{
    "name": "item1",
    "storages": [
       {"items": ["a", "b", "c", "d", "e", "f"]}, 
       {"items": ["a 1", "b 2", "c 3", "d 4", "e 5", "f 6"]}]
}

{
    "name": "item2",
    "storages": [
       {"items": ["d", "e", "f", "g", "h", "i", "j"]}, 
       {"items": ["d 4", "e 5", "f 6", "g 7", "h 8", "i 9", "j 10"]}
    ]
}
Run Code Online (Sandbox Code Playgroud)

我想搜索字符串序列,例如["d 4","e 5"].为此,我使用MoreLikeThis查询:

{
    "query": {
        "more_like_this" : {
            "fields" : ["storages.items"],
            "like" :  ["d 4","e 5"],
            "min_term_freq": 1,
            "min_doc_freq": 1
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

它工作得很好,但它返回"_score":第一个文件为0.1620518,第二个为"_score":0.13890153.

我希望从数组的开头('items')提高条件得分,因为因为"d 4","e 5"出现在数组的开头,所以它应该排名更高.

有没有办法在elasticsearch中创建这样的查询?可能它应该不是更像这个查询?

棘手的部分是查询可能像["d 4","e 5","xxx"](xxx不在文档中,但没关系)

Ami*_*aki 1

正如您在相关问题的答案中看到的那样,

\n\n
\n

数组被索引\xe2\x80\x94作为多值字段可搜索\xe2\x80\x94,这些字段\n是无序的

\n
\n\n

因此您在搜索时不能依赖顺序。

\n\n

更糟糕的是,对象数组并不像您想象的那样存储

\n\n
\n

对象数组并不像您期望的那样工作:您无法独立于数组中的其他对象来查询每个对象。如果您需要能够执行此操作,那么您应该使用嵌套数据类型而不是对象数据类型。

\n
\n