GET _search { "query": { "bool":{ "filter":{ "and":[ { "term":{ "Server": "XYZ" }, "range": { "DateTime":{ "from": "2018-12-13T00:20:48.782Z", "to":"2018-12-14T00:20:48.782Z" } } } ] }} } } Above is my elastic query to fetch all records belongs to XYZ Server and within the time range, I have Server and DateTime columns in my dataset but throws below error: { "error": { "root_cause": [ { "type": "parsing_exception", "reason": "[term] malformed query, expected [END_OBJECT] but found [FIELD_NAME]", "line": 9, "col": 11 } ], "type": "parsing_exception", "reason": "[term] malformed query, expected [END_OBJECT] but found [FIELD_NAME]", "line": 9, "col": 11 }, "status": 400 } What am i missing here!
3 Réponses :
Votre requête est mal formée, utilisez plutôt la requête suivante:
GET _search { "query": { "bool": { "filter": [ { "term": { "Server": "XYZ" } }, { "range": { "DateTime":{ "from": "2018-12-13T00:20:48.782Z", "to": "2018-12-14T00:20:48.782Z" } } } ] } } }
Vous ne pouvez pas avoir et
dans votre clause de filtre. Il n'y a pas de clause et
dans la requête ES.
Fondamentalement, vous devez combiner le filtre sur la clause term
et range
. Veuillez lire combiner les filtres dans ES pour en savoir plus informations à ce sujet.
Comme votre requête utilise une clause invalide, ES ne peut pas analyser votre requête.
Veuillez utiliser la requête appropriée et vous devriez pouvoir obtenir les résultats d'ES.
Veuillez essayer la requête ci-dessous, qui devrait fonctionner correctement et faites-moi savoir si cela ne fonctionne pas.
{ "query": { "constant_score": { "filter": { "bool": { "must": [ { "term": { "Server": "XYZ" } }, { "bool": { "must": [ { "range": { "DateTime": { "from": "2018-12-13T00:20:48.782Z", "to": "2018-12-14T00:20:48.782Z" } } } ] } } ] } } } } }
Si vous êtes dans un contexte de filtre
, devez-vous ajouter également une requête de type constant_score
?
Le message d'erreur indique clairement que la requête n'est pas correcte.
Vous pouvez consulter la documentation officielle pour range query et pour requête booléenne pour vérifier qu'il n'y a pas de filtre dans les requêtes booléennes et qu'il n'y a pas de requêtes de, à dans la plage.
Veuillez vérifier cette requête.
GET _search { "query": { "bool": { "must": [ { "term": { "Server": "XYZ" } }, { "range": { "DateTime":{ "gt": "2018-12-13T00:20:48.782Z", "lte": "2018-12-14T00:20:48.782Z" } } } ] } } }
Pouvez-vous ajouter les détails de votre mappage d'index?
Vous pouvez utiliser
lte
etgte
pour filtrer la requête de plage de dates. exemple