[英]Range Query in Elasticsearch Doesn't Filter on Certain Number Fields
[英]How to query with Range Query in elasticsearch (certain fields probably not exist )
我想使用范圍查詢查詢以下3條記錄。
第一條記錄沒有EndDate
字段,第二條記錄沒有StartDate
字段。
如果該字段沒有退出,則不會用作條件。
StartDate | EndDate
2015/01/01 | -
- | 2016/01/01
2015/01/01 | 2016/01/01
查詢:
"bool" : {
"must" : [
{"range" : {"StartDate" : { "lte" : "2015-06-01" }}},
{"range" : {"EndDate" : { "gte" : "2015-06-01" }}}
]
}
如果使用上述查詢,則只能獲取第三條記錄。
實際上,我想獲得所有3條記錄。 如何實現呢?
您可以編寫復雜的布爾查詢來手動處理每種情況。 我認為這會起作用,但這可能不是最方便,最有效的方法。 我不知道有什么更好的辦法
{
"bool" : {
"should" : [
{
"bool": {
"must": [
{
"bool": {
"must_not":
{"exists": { "field": "EndDate" }},
}
},
{"range" : {"StartDate" : { "lte" : "2015-06-01" }}}
]
}
},
{
"bool": {
"must":[
{
"bool": {
"must_not":
{"exists": { "field": "StartDate" }},
}
},{"range" : {"EndDate" : { "gte" : "2015-06-01" }}}
]
}
},
{
"bool" : {
"must" : [
{"range" : {"StartDate" : { "lte" : "2015-06-01" }}},
{"range" : {"EndDate" : { "gte" : "2015-06-01" }}}
]
}
}
]
}
}
編輯:我查閱了文檔,結果發現我在原始答案中使用的exists
查詢錯誤。 現在固定
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.