ElasticSearch-所有单词在查询中必须匹配

问题描述 投票:0回答:1

我正在使用弹性搜索来查找城市中的人。因此,我具有属性firstnamelastnamecity

[一个可能的搜索词是例如“ Charlotte Renee Tucker”,它应返回以下人员:{firstname: "Charlotte Renee", lastname: "Tucker", city: "New York"}{firstname: "Renee", lastname: "Tucker", city: "Charlotte"},但不返回{firstname: "Charlotte", lastname: "Tucker", city: "New Orleans"}

因此,所有术语都必须出现在某个字段中。在最后一个示例中,单词“ Renee”不是结果的一部分,因此不应返回。如果仅在一个属性中找到所有单词,例如您的名字是“ Charlotte Renee Tucker”,那是一个有效的搜索结果。我的查询当前看起来像这样:

{
  "bool": {
    "should": [
      {
        "match": {
          "lastname": {
            "query": "Charlotte Renee Tucker",
            "operator": "OR"
          }
        }
      },
      {
        "match": {
          "firstname": {
            "query": "Charlotte Renee Tucker",
            "operator": "OR"
          }
        }
      },
      {
        "match": {
          "city": {
            "query": "Charlotte Renee Tucker",
            "operator": "OR"
          }
        }
      }
    ]
  }
}

但是这也会返回一个单词与某些属性匹配的人。我已经玩过minimum_should_match参数,但是如果仅在一个属性中找到所有单词,则此功能将无效。有人可以帮忙吗?

elasticsearch elasticsearch-query booleanquery
1个回答
-1
投票

我认为您要搜索的是一个copy_to参数,通过该参数,您可以将所有3个搜索字段组合在一起,然后使用AND而不是OR(例如此处的示例:https://www.elastic.co/guide/en/elasticsearch/reference/current/copy-to.html

© www.soinside.com 2019 - 2024. All rights reserved.