首页 > 解决方案 > 如何在布尔查询中只选择一个分支

问题描述

我有一份文件清单

[
  {
    "shortName": "CA",
    "longName": "California"
  },
  {
    "shortName": "New York",
    "longName": "New York"
  },
]

如何配置查询以仅选择匹配的第一个字段,例如maximumSouldMatch=1

例如,如果我 search New York,它应该只匹配shortName但不能同时匹配,因为在这种情况下,分数将加倍

标签: elasticsearchelasticsearch-query

解决方案


使用带有类型的multi_match查询(恰好是默认值),返回的分数将是最佳匹配字段之一,但如果两个字段都匹配则不会合并(就像使用or的情况一样)best_fieldsmost_fieldscross_fields

{
  "query": {
    "multi_match" : {
      "query" : "New York",
      "fields" : [ "shortName", "longName" ] 
    }
  }
}

推荐阅读