2015-07-16 1 views
0

Je suis en train de créer une gamme de filtre sur la recherche élastique en utilisant la syntaxe suivante:Date de filtre sur la recherche élastique

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

Le format de données est:

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

Cependant quelles que soient les propriétés du filtre les mêmes résultats incorrects sont renvoyés par une recherche élastique. J'ai essayé d'ajouter le format suivant:

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

mais j'obtiens les mêmes résultats incorrects.

Un exemple plus complet est:

{ 
"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" 
     ] 
     } 
    } 
    ] 
} 
} 
} 

Répondre

0

Dans les documents JSON, les dates sont représentés sous forme de chaînes. Elasticsearch utilise un ensemble de formats préconfigurés pour reconnaître et analyser ces chaînes en une valeur longue représentant des millisecondes depuis l'époque UTC. Il se peut que votre champ de date ne figure pas dans l'ensemble de la date ES préconfigurée formats.

Les dates formatées seront analysées en utilisant le format spécifié dans le champ de date par défaut, mais elles peuvent être remplacées en passant le paramètre de format à la requête de plage.

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