簡體   English   中英

彈性搜索中的日期過濾器

[英]Date Filter on elastic search

我正在嘗試使用以下語法在彈性搜索上創建范圍過濾器:

{
"size": 100,
"filter": {
"and": {
  "filters": [
    {
      "range": {
        "listingDate": {
          "gt": "15/07/2017 16:08:53"
        }
      }
    }
  ]
}
}
}

數據格式為:

"listingDate": "07/07/2015 09:30:00",

但是,無論過濾器屬性如何,彈性搜索都會返回相同的錯誤結果。 我嘗試添加以下格式:

"format": "dd/MM/yyyy HH:mm:ss"

但我得到同樣的錯誤結果。

一個更完整的示例是:

{
"size": 100,
"sort": [
{
  "listingDate": {
    "order": "asc"
  }
}
],
"query": {
"bool": {
  "must": [
    {
      "query_string": {
        "query": "Event"
      }
    },
    {
      "range": {
        "listingDate": {
          "gte": "15/07/2015 16:08:53"
        }
      }
    },
    {
      "range": {
        "endDate": {
          "gte": "15/07/2015 16:08:53"
        }
      }
    }
  ]
}
},
"filter": {
"and": {
  "filters": [
    {
      "terms": {
        "departments": [
          "2393"
        ]
      }
    }
  ]
}
}
} 

在JSON文檔中,日期以字符串表示。 Elasticsearch使用一組預配置的格式來識別這些字符串並將其解析為一個長值,該長值表示UTC以來的毫秒數。 您的日期字段可能未在預配置的ES日期格式集中列出。

默認情況下,格式化的日期將使用date字段上指定的格式進行解析,但是可以通過將format參數傳遞給范圍查詢來覆蓋它。

{
    "range" : {
        "listingDate" : {
            "gte": "07/07/2015 09:30:00",
            "format": "dd/MM/yyyy HH:mm:ss"
        }
    }
}

假設“ arr”參數具有日期范圍,例如[“ 2019-07-10”,“ 2019-07-11”]

let start_date_query;
let range=[];
if ( arr.date_from ){

    if(arr.date_from[1]){

        range.push({

            "range":{
                "start_date":{ "gte":arr.date_from[0] }
           } 
        });

        range.push({

            "range":{
                "end_date":{ "lte": arr.date_from[1] }
           } 
        });

        start_date_query = {

                "query": {
                  "constant_score": {
                     "filter": {
                        "bool": {
                    "must":range
                }
            }
            }

        };

    }
 } 
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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