我正在尝试执行搜索,目标条件是( activationDate
在射程内 1598889600
至 1602051579
)或者 someFlag
= true
.
下面是我尝试过的查询,但它不会产生任何带有 someFlag
= true
(即使尺寸很大,例如5000)。我的elasticsearch有很多 someFlag
= true
.
总共有大约3000个文档,这个查询返回大约280个文档。
{
"query": {
"bool": {
"must": [
{
"range": {
"activationDate": {
"gte": 1598889600
}
}
},
{
"range": {
"activationDate": {
"lte": 1602051579
}
}
}
],
"should": {
"match": {
"someFlag": true
}
}
}
},
"from": 1,
"size": 1000
}
我错过什么了吗?
2条答案
按热度按时间1dkrff031#
将must替换为should,并按原样将minimum\u should\u match=1设置为or查询,如果任何记录只满足一个ceiteria,就可以了。接下来,将这两个范围标准减少到一个,将gte和lte结合起来。
h79rfbju2#
这应该起作用:
理论上也应该如此:
但是,我给出的第一个查询将bool子句 Package 在过滤器上下文中(这样就不需要评分,查询就可以缓存了)。
您的bool查询可能不起作用,因为您正在使用
match
查询,而不是term
.match
通常仅用于文本搜索。