elasticsearch - 多个 elasticsearch 匹配查询
问题描述
假设我有一个包含 3 个文本字段的文档:field_a、field_b 和 field_c。是否可以进行单个查询,以便我们按以下顺序获得结果:
- field_a 中的“匹配”
- field_b 中的“匹配”
- field_c 中的“匹配”
'mutli_match' 结果可以将来自不同字段的结果按照结果的顺序混合在一起,我想要的是来自 field_a 的任何和所有结果,然后是来自 field_b 的任何和所有结果,依此类推。
解决方案
即使,我觉得这种方法总体上很奇怪(我认为您遇到的问题应该以不同的方式解决,例如搜索的多个阶段),我认为您现在可以通过以下方式解决它。
多匹配查询具有为您的字段提供提升的完美能力。例如
"query": {
"multi_match" : {
"query" : "this is a test",
"fields" : [ "field_a^1000", "field_b^10", "field_c" ]
}
}
该符号^
是一个增强符号,它将在该字段中将匹配的分数乘以值 - 1000,如果field_a
但是,我建议一般避免这种行为,因为:
- 很难控制那些提升值
在某些情况下可能表现不如预期(假设您在 1000 中获得了 1000 分
field_b
)如果你有很多点击,这会让整个想法
field_c
有点过时,因为没有用户会在搜索结果中滚动那么远
推荐阅读
- three.js - chrome与firefox中PlaneBufferGeometry的不同方向
- firebase - 如何在 Flutter 中使用查询访问 Cloud Firestore 的数组索引?
- gradle - 在 gradle 复制任务中,“扩展”不能单独工作
- android - In App Billing BroadcastReceiver 内存泄漏
- vba - VBA,使用用户定义的函数从范围中查找单词
- php - 在 codeigniter 中使用 distinct 选择多个列
- java - 某些短语后的java正则表达式匹配
- php - 替换 php 5.6 中的数组定义
- r - 选择时间数据
- ios - 动画时居中 UIImageView 不起作用