【发布时间】:2018-10-28 22:25:57
【问题描述】:
我想合并查询 Elasticsearch 索引的单独字段获得的排名,以便获得“复合”排名。
作为一个(愚蠢的)“配对”示例,假设我想在包含他们最喜欢的音乐、食物、运动的人的索引中检索最佳匹配结果。
单独的查询可以是例如
"query": { "match" : { "music" : "indie classical metal" } }
这将产生我作为排名结果:
- 爱丽丝,2. 鲍勃,3. 查理;
"query": { "match" : { "foods" : "falafel strawberries coffee" } }
屈服
- 爱丽丝,2. 查理,3. 鲍勃;
和
"query": { "match" : { "sports" : "basketball ski" } }
屈服
- 查理,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 和dis_max?)
【问题讨论】:
标签: python elasticsearch