怎么做多个"匹配"或" match_phrase" ElasticSearch中的值

时间:2014-07-03 09:35:41

标签: elasticsearch

所以ElasticSearch有 term 查询,它允许我提供多个值并返回一个文档,其中字段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"
                         }
                     }
                 }
              ]
           }
       }
    }
  }
}

2 个答案:

答案 0 :(得分:8)

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

"query" : {
        "bool": {
            "should": [
               {
                   "match_phrase": {
                      "myField1": "My first search phrase"
                   }
               },
               {
                   "match_phrase": {
                      "myField1": "My second search phrase"
                   }
               }
            ]
        }
    }

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

答案 1 :(得分:5)

Query string在这些方面会有所帮助

   {
      "query": {
        "query_string": {
          "default_field": "myField1",
          "query": "\"My first search phrase\" OR \"My second search phrase\" OR \"My third search phrase\""
        }
      }
    }