我想合并从查询Elasticsearch索引的单独字段获得的排名,从而获得“复合”排名。在
作为一个(愚蠢的)“婚介”例子,假设我想在一个包含他们最喜欢的音乐、食物、运动的人的索引中检索最佳匹配结果。在
单独的查询可以是
"query": { "match" : { "music" : "indie classical metal" } }
我的排名结果是:
屈服
以及
"query": { "match" : { "sports" : "basketball ski" } }
屈服
现在,我想根据上面的排名获得一个“聚合”排名,例如使用How to merge a collection of ordered preferences中列出的投票方法。在
到目前为止,为了实现这些目标,我使用了复合查询的语法,比如
"query": {
"bool": {
"should": [
{ "match" : { "music" : "indie classical metal" } },
{ "match" : { "foods" : "falafel strawberries coffee" } },
{ "match" : { "sports" : "basketball ski" } },
]
}
}
或者
"query": {
"dis_max": {
"queries": [
{ "match" : { "music" : "indie classical metal" } },
{ "match" : { "foods" : "falafel strawberries coffee" } },
{ "match" : { "sports" : "basketball ski" } },
]
}
}
但是(AFAIK)这些并没有达到我想要的效果(不是用分数,而是用等级)。我知道后处理排名相当简单(例如,使用elasticsearch py,然后使用一些Python行),但是是否可以直接使用elasticsearch查询来完成上述操作?在
(另外一个问题是:你能建议一些替代策略来合并来自多个领域的排名,除了我可以尝试的bool
+should
和{
看看Function Score Query-它应该允许你做你想做的事情。但请注意,这可能会导致查询执行速度变慢。在
相关问题 更多 >
编程相关推荐