数组字段的elasticsearch范围过滤器
elasticsearch range filter for array field
我有一个包含整数数组的字段,例如:
_source: {
...
prices: [
20001,
30001
]
}
我想过滤结果,使价格至少包含介于以下值之间的列表中的一个值:
[20002,30000] #
不会 return 上述文档,因为没有值介于 20002 和 30000 之间
但是 [10000,20002]
会 return 上面的文档,因为上面文档的价格字段中的 20001 在 10000 和 20002
之间
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
}
}
}
}
}
}
请注意,我在我的示例中使用了过滤器,因为您要求使用过滤器:)
我有一个包含整数数组的字段,例如:
_source: {
...
prices: [
20001,
30001
]
}
我想过滤结果,使价格至少包含介于以下值之间的列表中的一个值:
[20002,30000] #
不会 return 上述文档,因为没有值介于 20002 和 30000 之间
但是 [10000,20002]
会 return 上面的文档,因为上面文档的价格字段中的 20001 在 10000 和 20002
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
}
}
}
}
}
}
请注意,我在我的示例中使用了过滤器,因为您要求使用过滤器:)