我有弹性搜索文档,其结构如下:
{
"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不在文档中,但没关系)
答案 0 :(得分:0)
如您在this中对相关问题的回答
数组被索引为可搜索的多值字段,这些字段是 无序的
所以您在搜索时不能指望订单。
更糟糕的是,对象数组is not stored as you think。
对象数组无法正常运行:您不能独立于数组中的其他对象查询每个对象。如果需要执行此操作,则应使用嵌套数据类型而不是对象数据类型。