1

我正在尝试对我的弹性搜索数据集执行查询。我的目标是获得符合任何一个标准的所有记录,所以基本上是一堆 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 在弹性搜索中都存储为数组。我需要获取任何查询值与存储数组中的任何值匹配的所有结果。

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

4

1 回答 1

2

您使用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"]}}
        ]
      }
    }
  }
}
于 2013-05-23T09:52:48.203 回答