我的索引具有“valid_until”字段,该字段可以为null或有效的日期时间。我想编写一个查询以从索引中获取所有文档,并仅在“valid_until”具有有效日期的情况下应用范围过滤器。
一些索引数据:
[
['name' => 'book1', 'valid_until' => '2019-09-30 18:00:00'],
['name' => 'book2', 'valid_until' => ''],
['name' => 'book3', 'valid_until' => '2019-09-20 18:00:00'],
],
这是我尝试过的查询:
{
"query": {
"bool": {
"should": [
{
"range": {
"valid_until": {
"gte": "2019-09-22 00:00:00"
}
}
},
{
"bool": {
"must_not": {
"exists": {
"field": "valid_until"
}
}
}
}
]
}
}
}
最佳答案
万一将来有人需要它,这就是我解决的方法:
{
"query": {
"bool": {
"filter": [
{
"bool": {
"should": [
{
"range": {
"valid_until": {
"gte": "now"
}
}
},
{
"bool": {
"must_not": {
"exists": {
"field": "valid_until"
}
}
}
}
]
}
}
],
"must_not": [],
"should": [],
"must": []
}
}
}
关于elasticsearch - 如果字段存在,Elasticsearch查询将应用范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58050149/