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

时间:2016-07-26 10:09:28

标签: 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"]}
    ]
}

我想搜索字符串序列,例如[“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
        }
    }
}

并且它几乎正常,但它返回“_score”:第一个文档为0.1620518,第二个文档为“_score”:0.13890153。

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

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

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

1 个答案:

答案 0 :(得分:0)

如您在this中对相关问题的回答

  

数组被索引为可搜索的多值字段,这些字段是   无序的

所以您在搜索时不能指望订单。

更糟糕的是,对象数组is not stored as you think

  

对象数组无法正常运行:您不能独立于数组中的其他对象查询每个对象。如果需要执行此操作,则应使用嵌套数据类型而不是对象数据类型。