【问题标题】:How to do multiple "match" or "match_phrase" values in ElasticSearch如何在 ElasticSearch 中执行多个“match”或“match_phrase”值
【发布时间】:2014-07-03 09:35:40
【问题描述】:

所以 ElasticSearch 有 terms 查询,它让我可以提供多个值并返回字段 X 匹配其中任何值的文档列表。

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

当前方法

在单个字段中搜索三个值之一的查询应该是 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"
                         }
                     }
                 }
              ]
           }
       }
    }
  }
}

【问题讨论】:

标签: elasticsearch


【解决方案1】:

经过一个漫长的夜晚试图自己解决这个问题,我想出了这个:

"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

【讨论】:

  • 提示:改成mustAND条件运算符,should就像使用OR
【解决方案2】:

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

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

【讨论】:

  • 您还可以查看许多文件并使用 AND 运算符:"query_string": { "query": "fieldOne:(\"foo\" OR \"bar\") AND fieldTwo:(\"foobar\")" }
猜你喜欢
  • 2020-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-07
相关资源
最近更新 更多