我有一个包含整数数组的字段,例如:
_source: {
...
prices: [
20001,
30001
]
}
我想过滤结果,以便价格至少包含一个值列表,例如:
[20002,30000] #
不会返回上述文档,因为20002和30000之间没有值
但是[10000,20002]
会返回上面的文件,因为上面文件的价格字段中的20001介于10000和20002之间
答案 0 :(得分:8)
Elasticsearch始终认为某个字段可以包含值列表,因此range filter应该有效。如果任何值与范围匹配,则将对其进行过滤。
您可以将该过滤器用作filtered query:
的一部分{
"query": {
"filtered": {
"filter": {
"range": {
"prices": {
"gte": 10000,
"lte": 20002
}
}
}
}
}
}
但是,过滤查询在2.0中已弃用,因此,如果您使用的是2.0,则最好使用带有过滤器的bool query:
{
"query": {
"bool": {
"must": {
"match_all": {}
},
"filter": {
"range": {
"prices": {
"gte": 10000,
"lte": 20002
}
}
}
}
}
}
请注意,我在我的示例中使用了一个过滤器,因为您要求使用过滤器:)