或弹性搜索中的查询

时间:2013-05-23 00:27:47

标签: 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全部存储为弹性搜索中的数组。我需要获得所有结果,其中任何查询值都与存储数组中的任何值匹配。

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

1 个答案:

答案 0 :(得分:1)

您使用match作为过滤器类型,但不存在。 与您当前的设置相反,您可以使用terms代替。 http://www.elasticsearch.org/guide/reference/query-dsl/terms-query/

SO:

{
  "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"]}}
        ]
      }
    }
  }
}