假设我有以下索引文档:
{
"field1": [400, 800]
}
我想使用2个搜索参数(min_val = 300
和max_val = 500
)创建查询,以选择这两个范围重叠的文档。
在我的示例中,应该选择上面的文档,我们可以看到:
300 500
[======================]
[=====================]
400 800
找到重叠两个数字范围的文档的最有效方法是什么? 我可以使用多个比较,以及许多 ands 和 ors ,但我正在寻找一种更简单有效的方法来实现这一目标。
答案 0 :(得分:3)
在ES中,field1
之类的数字范围实际上并不是一个范围,只是两个不同的值,即400和800.您所要做的就是使用简单的range
query并将field1
与范围的下限和上限进行比较,即
使用DSL表示,您最终会得到像这样的单一范围查询:
{
"query": {
"range": {
"field1": {
"gte": 300,
"lte": 500
}
}
}
}