簡體   English   中英

如何在Elasticsearch中使用范圍查詢進行查詢(某些字段可能不存在)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM