多个elasticsearch匹配查询
Multiple elasticsearch match queries
假设我有一个包含 3 个文本字段的文档:field_a、field_b 和 field_c。
是否可以进行一次查询,以便我们按以下顺序获得结果:
- 'match' 在 field_a
- 'match' 在 field_b
- 'match' 在 field_c
'mutli_match' 结果可以将来自不同字段的结果按结果顺序混合在一起,我想要的是来自 field_a 的任何和所有结果,然后来自 [=27] 的任何和所有结果=] 等等。
尽管如此,我总的来说觉得这种方法很奇怪(我认为你遇到的问题应该以不同的方式解决,例如多阶段搜索),我认为你现在可以通过以下方式解决它。
多匹配查询可以完美provide boost到您的字段。例如
"query": {
"multi_match" : {
"query" : "this is a test",
"fields" : [ "field_a^1000", "field_b^10", "field_c" ]
}
}
符号 ^
是一个增强符号,它会将此字段中的匹配分数乘以值 - 在 field_a
的情况下为 1000
但是,我建议一般情况下避免这种行为,因为:
- 很难控制这些提升值
在某些情况下,它的表现可能不如预期(假设您在 field_b
中获得 1000 分)
如果你有很多点击,这使得匹配 field_c
的整个想法有点过时,因为没有用户会在搜索结果中滚动那么远
假设我有一个包含 3 个文本字段的文档:field_a、field_b 和 field_c。 是否可以进行一次查询,以便我们按以下顺序获得结果:
- 'match' 在 field_a
- 'match' 在 field_b
- 'match' 在 field_c
'mutli_match' 结果可以将来自不同字段的结果按结果顺序混合在一起,我想要的是来自 field_a 的任何和所有结果,然后来自 [=27] 的任何和所有结果=] 等等。
尽管如此,我总的来说觉得这种方法很奇怪(我认为你遇到的问题应该以不同的方式解决,例如多阶段搜索),我认为你现在可以通过以下方式解决它。
多匹配查询可以完美provide boost到您的字段。例如
"query": {
"multi_match" : {
"query" : "this is a test",
"fields" : [ "field_a^1000", "field_b^10", "field_c" ]
}
}
符号 ^
是一个增强符号,它会将此字段中的匹配分数乘以值 - 在 field_a
但是,我建议一般情况下避免这种行为,因为:
- 很难控制这些提升值
在某些情况下,它的表现可能不如预期(假设您在
field_b
中获得 1000 分)如果你有很多点击,这使得匹配
field_c
的整个想法有点过时,因为没有用户会在搜索结果中滚动那么远