ElasticSearch - multi_match 和 AND/OR

ElasticSearch - multi_match with AND/OR

我想在索引中的多个字段中使用 multi_match

例如,我有这个用户索引。

Users
id
real_name
contact_name
user_name

这些字段都使用标准分析器。所以我想搜索这 3 个字段(real_name、contact_name、user_name)并查找至少在其中一个字段中同时具有 "John" 和 "Peter" 的用户那些字段。

我知道如果不需要 AND 部分我可以使用 multi_match。示例:仅搜索 John:

{
  "multi_match" : {
    "query":    "john", 
    "fields": [ "real_name", "contact_name", "user_name" ] 
  }
}

https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-multi-match-query.html#query-dsl-multi-match-query

但是如果我想要额外的 and 条件,我该怎么做。 multi_match 可以做到这一点吗?

试试这个。 John 必须出现在 real_name 或 contact_name 或 user_name.

{
"bool": {
    "should": [
        {
          "multi_match" : {
            "query":      "john",
            "type":       "cross_fields",
            "fields":     [ "real_name", "contact_name", "user_name" ],
            "minimum_should_match": "50%" 
          }
        }
    ]
  }
}

使用"operator" : "AND":

{
  "query": {
    "bool": {
      "should": [
        {
          "multi_match": {
            "query": "john",
            "fields": [
              "real_name",
              "contact_name",
              "user_name"
            ],
            "type": "cross_fields",
            "operator": "AND"
          }
        }
      ]
    }
  }
}

https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-multi-match-query.html#operator-min