我想合并从查询Elasticsearch索引的单独字段获得的排名,以获得“复合”排名。
作为一个(愚蠢的)“配对”示例,假设我想要在包含他们喜欢的音乐,食物,体育的人的索引上检索最佳匹配结果。
单独的查询可以是例如。
"query": { "match" : { "music" : "indie classical metal" } }
这将使我成为排名结果:
"query": { "match" : { "foods" : "falafel strawberries coffee" } }
屈服
和
"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
和dis_max
?)