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