我正在尝试对弹性搜索数据集执行查询。我的目标是获得符合任何一个标准的所有记录,所以基本上是一堆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全部存储为弹性搜索中的数组。我需要获得所有结果,其中任何查询值都与存储数组中的任何值匹配。
如果它们之间有任何匹配,我需要返回结果。 任何人都可以指出这有什么问题吗?当我知道他们在那里时,我没有得到任何结果。
答案 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"]}}
]
}
}
}
}