L'interrogation Elasticsearch par la combinaison d'une plage et d'un terme de correspondance format json
Je suis en train d'interroger un index Elasticsearch par un intervalle de temps, et de plus, ils ont une durée corresponde à une valeur de chaîne.
J'ai essayé cette requête, ce qui semble assez simple:
{
"query" : {
"bool": {
"must": [
{
"match": {
"method": "/customer/help"
}
},
{
"range" : {
"startTime": {
"from" : "2015-10-20T13:00-04:00",
"to" : "2015-10-20T14:00-04:00"
}
}
}
]
}
}
}
Dans ce cas, je veux que tous les documents dans le cadre de l'intervalle de temps qui ont également une méthode de la valeur de "/customer/help"
.
Dans mes résultats, je suis l'obtention de résultats qui sont à l'intérieur de la plage de temps, mais je reçois des documents qui ont des valeurs différentes pour le "method"
terrain, quand je veux juste les résultats avec "/customer/help"
dans ce domaine.
Sont les différentes valeurs pour la "méthode" des valeurs de champ qui ont "client" ou "aide" avec des résultats attendus de la clientèle "/help"? Dans ce cas, le problème est que Elasticsearch est d'analyser le terrain (probablement analyseur Standard si vous n'avez pas spécifié le mapping). Si vous n'envisagez pas d'utiliser l'analyseur pour ce champ dans l'avenir, alors vous pouvez définir des "index" : "not_analyzed de la propriété" pour ce champ.
Les autres valeurs n'ont client/<autre chose> mais ce qui est bizarre, c'est que si je lance une requête séparément où je suis, l'exclusion de la plage, je ne reçois que les résultats de la méthode = "client/aide".
De quoi êtes-vous en passant par la taille des param? Est-ce juste une coïncidence et que vous êtes seulement de voir un sous-ensemble de tous les résultats lors de la coupe de la requête de plage?
Vous devez utiliser un
Les autres valeurs n'ont client/<autre chose> mais ce qui est bizarre, c'est que si je lance une requête séparément où je suis, l'exclusion de la plage, je ne reçois que les résultats de la méthode = "client/aide".
De quoi êtes-vous en passant par la taille des param? Est-ce juste une coïncidence et que vous êtes seulement de voir un sous-ensemble de tous les résultats lors de la coupe de la requête de plage?
Vous devez utiliser un
term
requête au lieu de match
requête si vous êtes à la recherche pour les correspondances exactes pour votre method
champ.
OriginalL'auteur smithzo622 | 2015-10-20
Vous devez vous connecter pour publier un commentaire.
Dans votre cartographie, vous devez avoir
method
commenot_analyzed
(ou analysées aveckeyword
de l'analyseur) et la requête doit utiliserterm
. De cette façon, le texte de l'indice de la méthode est indexé comme un seul jeton etterm
fait que le texte de votre recherche correspond exactement à la jeton indexé dansmethod
:Et la requête, vous devez utiliser:
Merci, ça marche pour moi!
OriginalL'auteur Andrei Stefan