1

我正在使用弹性搜索来寻找城市中的人。所以我有属性firstname,lastnamecity

例如,可能的搜索词是“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参数,但是如果仅在一个属性中找到所有单词,这将不起作用。有人可以帮忙吗?

这是我的映射:

{
  "people": {
    "mappings": {
      "properties": {
        "city": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            }
          }
        },
        "firstname": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            }
          }
        },
        "lastname": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            }
          }
        }
      }
    }
  }
}

我添加了以下文件:

{"firstname": "Charlotte Renee", "lastname": "Tucker", "city": "New York"}

{"firstname": "Renee", "lastname": "Tucker", "city": "Charlotte"}

{"firstname": "Charlotte", "lastname": "Tucker", "city": "New Orleans"}

通过上述查询可以找到所有文档,但我不希望找到最后一个文档,因为它不包含“Renee”一词。

4

1 回答 1

0

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

于 2020-06-03T09:48:11.777 回答