【问题标题】:OR query in Elastic Search在 Elastic Search 中进行 OR 查询
【发布时间】:2013-05-23 22:28:37
【问题描述】:

我正在尝试对我的弹性搜索数据集执行查询。我的目标是获得符合任何一个标准的所有记录,所以基本上是一堆 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


    【解决方案1】:

    您使用match 作为过滤器类型,afaik 不存在。 取而代之的是您当前的设置,您可以改用termshttp://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"]}}
            ]
          }
        }
      }
    }
    

    【讨论】:

    • 注意:您混淆了查询和过滤器。 match 查询确实存在,但 match 过滤器不存在。
    • 马虎。感谢您指出。更新了最初的解释。
    猜你喜欢
    • 2022-10-04
    • 1970-01-01
    • 2018-11-27
    • 2023-01-13
    • 2016-02-19
    • 2013-08-15
    • 2018-11-03
    • 1970-01-01
    • 2014-12-03
    相关资源
    最近更新 更多