elasticsearch - Elastic Search 中的 OR 查询

标签 elasticsearch

我正在尝试对我的 Elasticsearch 数据集执行查询。我的目标是获得符合任何一个标准的所有记录,所以基本上是一堆 OR。我的查询如下所示:

{
  "query" : {
    "filtered" : {
      "query" : {
        "match_all":{}
      }, 
      "filter" : { 
        "or" : [
          {"match" : {"field1" : ["value1", "value1.5"]}}, 
          {"match" : {"field2" : ["value2", "value2.5"]}}, 
          {"match" : {"field3" : ["value3", "value3.5"]}}, 
          {"match" : {"field4" : ["value4", "value4.5"]}}
        ]
      }
    }
  }
}

Field1-Field4在elasticsearch中全部存储为数组。我需要获取任何查询值与存储数组中的任何值匹配的所有结果。

如果它们之间有任何匹配,我需要返回结果。 谁能指出这有什么问题吗?当我知道它们在那里时,我没有得到任何结果。

最佳答案

您正在使用 match 作为过滤器类型,据我所知,它不存在。 根据您当前的设置,您可以使用 terms 来代替。 http://www.elasticsearch.org/guide/reference/query-dsl/terms-query/

所以:

{
  "query" : {
    "filtered" : {
      "query" : {
        "match_all":{}
      }, 
      "filter" : { 
        "or" : [
          {"terms" : {"field1" : ["value1", "value1.5"]}}, 
          {"terms" : {"field2" : ["value2", "value2.5"]}}, 
          {"terms" : {"field3" : ["value3", "value3.5"]}}, 
          {"terms" : {"field4" : ["value4", "value4.5"]}}
        ]
      }
    }
  }
}

关于elasticsearch - Elastic Search 中的 OR 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16703736/

相关文章:

elasticsearch - 如何在不通过 tls 传递 -k 的情况下 curl elasticsearch kubernetes 运算符?

java - 嵌入式节点名称

Elasticsearch:如何将 "nested query"添加到(嵌套)过滤器中

java - Elasticsearch 传输客户端 java 客户端

elasticsearch - Elasticsearch根据字段值删除文档

elasticsearch - Elasticsearch:基于仅在两个映射之一中定义的属性进行过滤

elasticsearch - ElasticSearch:如何为数组字段添加映射?

elasticsearch - 使用 OR 和通配符查询 elasticsearch

elasticsearch - ServiceNow与Elasticsearch的集成

elasticsearch - 如果包含标签,如何绕过过滤器?