J'utilise la recherche par requête de correspondance pour "request.method": "GET":
{
"query": {
"filtered": {
"query": {
"match": {
"request.method": "GET"
}
},
"filter": {
"bool": {
"must": [
...
Comme prévu, la requête de correspondance peut obtenir les résultats, comme indiqué ci-dessous:
Mais la question est lors de l'utilisation de la requête Term, il n'y a pas de résultats.
Mettez à jour la requête pour remplacer "match" par "term", et conservez l'autre partie:
{
"query": {
"filtered": {
"query": {
"term": {
"request.method": "GET"
}
},
"filter": {
"bool": {
"must": [
...
Je pense que la requête Term est la version "non analysée" de la requête Match. Comme le montre l'image ci-dessus, il existe au moins un enregistrement dont "request.method" est égal à "GET". Pourquoi n'y a-t-il aucun résultat pour la requête Term susmentionnée? Merci.
En supposant que vous utilisez le Standard AnalyzerGET
devient get
lorsqu'il est stocké dans l'index. Le document source aura toujours l'original "GET".
La requête match
appliquera le même analyseur standard au terme de recherche et correspondra donc à ce qui est stocké dans l'index. La requête term
n'applique aucun analyseur au terme recherché, elle recherchera donc uniquement ce terme dans l'index inversé.
Pour utiliser le terme requête dans votre exemple, modifiez la majuscule "GET" en minuscule "get" ou modifiez votre mappage de sorte que le champ request.method soit défini sur not_analyzed
.