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

a8jjtwal  于 2022-11-02  发布在  ElasticSearch
关注(0)|答案(3)|浏览(352)

因此ElasticSearch有terms查询,它允许我提供多个值并返回一个文档列表,其中字段X与这些值中的任何一个匹配。
但是我想对match_phrase做同样的事情--也就是说,返回字段X中包含一个不区分大小写的匹配项的文档。我目前使用一个or过滤器(见下文)来做这件事。但是,考虑到terms已经做了类似的事情,这似乎是一种非常冗长的方式来做我想要做的事情。

当前方法

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

1tuwyuhd1#

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

"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

2guxujil

2guxujil2#

查询字符串在这里会很有帮助

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

wnrlj8wa3#

ElasticSearch域特定语言(DSL)中的查询如下所示:

{
  "query": {
    "bool": {
      "should": [
        {
          "match_phrase": {
            "platform_id": "GPL13534"
          }
        },
        {
          "match_phrase": {
            "platform_id": "GPL8490"
          }
        }
      ],
      "minimum_should_match": 1
    }
  }
}

要轻松了解此类内容,请使用Kibana界面:

  • 点击右下角的回车号以接受多个选项
  • “编辑为查询DSL”

(In此示例myField1是platform_id,搜索短语是“GPL***”)

相关问题