首页 > 解决方案 > 多个 elasticsearch 匹配查询

问题描述

假设我有一个包含 3 个文本字段的文档:field_a、field_b 和 field_c。是否可以进行单个查询,以便我们按以下顺序获得结果:

  1. field_a 中的“匹配”
  2. field_b 中的“匹配”
  3. field_c 中的“匹配”

'mutli_match' 结果可以将来自不同字段的结果按照结果的顺序混合在一起,我想要的是来自 field_a 的任何和所有结果,然后是来自 field_b 的任何和所有结果,依此类推。

标签: elasticsearchelasticsearch-6

解决方案


即使,我觉得这种方法总体上很奇怪(我认为您遇到的问题应该以不同的方式解决,例如搜索的多个阶段),我认为您现在可以通过以下方式解决它。

多匹配查询具有为您的字段提供提升的完美能力。例如

"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有点过时,因为没有用户会在搜索结果中滚动那么远


推荐阅读