如何在ElasticSearch中执行多个"match"或"match_phrase"值

Mal*_*ric 13 elasticsearch

所以ElasticSearch有一个术语查询,它允许我提供多个值并返回一个文档,其中字段X匹配任何这些值.

但我想用match_phrase做同样的事情- 即返回文档,其中字段X包含对带空格的术语不区分大小写的匹配.我目前使用或过滤器(见下文).但这似乎是一种非常冗长的方式来做我想要的,考虑到术语已经做了类似的事情.

目前的方法

在单个字段中搜索三个值之一的查询应该是33行,这似乎很荒谬.

{
  "query": {
    "filtered": {
       "filter": {
           "or": {
              "filters": [
                 {
                     "query": {
                         "match_phrase": {
                            "myField1": "My first search phrase"
                         }
                     }
                 },
                 {
                     "query": {
                         "match_phrase": {
                            "myField1": "My second search phrase"
                         }
                     }
                 },
                 {
                     "query": {
                         "match_phrase": {
                            "myField1": "My third search phrase"
                         }
                     }
                 }
              ]
           }
       }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*wik 10

经过一个漫长的夜晚试图弄清楚这一点后,我想出了这个:

"query" : {
        "bool": {
            "should": [
               {
                   "match_phrase": {
                      "myField1": "My first search phrase"
                   }
               },
               {
                   "match_phrase": {
                      "myField1": "My second search phrase"
                   }
               }
            ]
        }
    }
Run Code Online (Sandbox Code Playgroud)

参考:https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html

  • 提示:更改为“must”以执行“AND”条件运算符,“should”类似于使用“OR” (4认同)

kee*_*ety 5

查询字符串在这里对这些行很有帮助

   {
      "query": {
        "query_string": {
          "default_field": "myField1",
          "query": "\"My first search phrase\" OR \"My second search phrase\" OR \"My third search phrase\""
        }
      }
    }
Run Code Online (Sandbox Code Playgroud)