python - 如何合并来自多个 Elasticsearch 查询的排名?
问题描述
我想合并通过查询 Elasticsearch 索引的单独字段获得的排名,以获得“复合”排名。
作为一个(愚蠢的)“配对”示例,假设我想在包含他们最喜欢的音乐、食物、运动的人的索引上检索最佳匹配结果。
单独的查询可以是例如
"query": { "match" : { "music" : "indie classical metal" } }
这将产生我作为排名结果:
- 爱丽丝,2. 鲍勃,3. 查理;
"query": { "match" : { "foods" : "falafel strawberries coffee" } }
屈服
- 爱丽丝,2. 查理,3. 鲍勃;
和
"query": { "match" : { "sports" : "basketball ski" } }
屈服
- 查理,2. 爱丽丝,3. 鲍勃。
现在,我想根据上面的排名获得一个“综合”排名,例如使用如何合并有序偏好集合中列出的投票方法。
到目前为止,为了实现这些目标,我使用了复合查询的语法,例如
"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
我可以尝试一下?)
解决方案
看看Function Score Query - 它应该允许你做你正在寻找的东西。但请注意,这可能会导致查询执行速度变慢。
推荐阅读
- c# - 如何在 CosmosDBTrigger(或任何其他触发器)属性中配置非字符串值
- c++ - 具有可变数量参数的构造函数
- c++-winrt - 在 uwp 中以编程方式设置系统时间
- python - 如何获取某个组的 Kafka 主题中未读消息的计数
- c++ - 为什么在使用 cv::Umat 时调用 ORB_Impl::detectAndCompute 会阻塞
- php - 如何使用 PHP 从数据库的列中回显一个单词的总数?
- python-poetry - 使用 Poetry 安装 dbt(数据构建工具)时出错
- python - pyinstaller kivy 错误无法获取任何图像提供程序,中止
- lua - 如何在 Roblox Studio 中找到游戏手柄指针的目标?
- android - Android依赖项中的重复类错误