如何合并来自几个Elasticsearch查询的排名?

2024-09-20 05:39:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我想合并从查询Elasticsearch索引的单独字段获得的排名,从而获得“复合”排名。在

作为一个(愚蠢的)“婚介”例子,假设我想在一个包含他们最喜欢的音乐、食物、运动的人的索引中检索最佳匹配结果。在

单独的查询可以是

"query": { "match" : { "music" : "indie classical metal" } }

我的排名结果是:

  1. 爱丽丝,2岁。鲍勃,3岁。查理

^{pr2}$

屈服

  1. 爱丽丝,2岁。查理,3岁。鲍勃

以及

"query": { "match" : { "sports" : "basketball ski" } }

屈服

  1. 查理,2岁。爱丽丝,3岁。鲍勃。在

现在,我想根据上面的排名获得一个“聚合”排名,例如使用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和{}之外?)在


Tags: matchmusicqueryboolmetalsportsshould屈服