ElasticSearch - 使用 AND/OR 进行多重匹配

ger*_*rky 5 search full-text-search ruby-on-rails elasticsearch elasticsearch-2.0

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

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

Users
id
real_name
contact_name
user_name
Run Code Online (Sandbox Code Playgroud)

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

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

{
  "multi_match" : {
    "query":    "john", 
    "fields": [ "real_name", "contact_name", "user_name" ] 
  }
}
Run Code Online (Sandbox Code Playgroud)

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

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

Nic*_*asY 2

使用"operator" : "AND"

{
  "query": {
    "bool": {
      "should": [
        {
          "multi_match": {
            "query": "john",
            "fields": [
              "real_name",
              "contact_name",
              "user_name"
            ],
            "type": "cross_fields",
            "operator": "AND"
          }
        }
      ]
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

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