ElasticSearch - 带AND / OR的multi_match

时间:2016-10-20 06:11:31

标签: ruby-on-rails search elasticsearch full-text-search elasticsearch-2.0

我想在索引中的多个字段中使用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执行此操作?

2 个答案:

答案 0 :(得分:1)

使用"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

答案 1 :(得分:0)

试试这个。 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%" 
          }
        }
    ]
  }
}