多个Elasticsearch匹配查询

时间:2019-01-18 20:58:44

标签: elasticsearch elasticsearch-6

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

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

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

1 个答案:

答案 0 :(得分:1)

尽管如此,我仍然普遍认为这种方法很奇怪(我认为应该以不同的方式解决您遇到的问题,例如多个搜索阶段),我认为您现在可以通过以下方式解决它。

多重匹配查询具有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的想法就会过时,因为没有用户会在搜索结果中滚动那么远