Ich verwende die Suche nach Übereinstimmungsabfragen für "request.method": "GET":
{
"query": {
"filtered": {
"query": {
"match": {
"request.method": "GET"
}
},
"filter": {
"bool": {
"must": [
...
Wie erwartet kann die Match-Abfrage die folgenden Ergebnisse erhalten:
Die Frage ist jedoch, dass bei Verwendung der Term-Abfrage keine Ergebnisse erzielt werden.
Aktualisieren Sie die Abfrage, um die "Übereinstimmung" in "Begriff" zu ändern, und behalten Sie den anderen Teil bei:
{
"query": {
"filtered": {
"query": {
"term": {
"request.method": "GET"
}
},
"filter": {
"bool": {
"must": [
...
Ich denke, die Term-Abfrage ist die "nicht analysierte" Version der Match-Abfrage. Wie im obigen Bild gezeigt, gibt es mindestens einen Datensatz mit "request.method" gleich "GET". Warum gibt es keine Ergebnisse für die oben genannte Termabfrage? Vielen Dank.
elasticsearch
Linlin
quelle
quelle
get
in Kleinbuchstaben angebenAntworten:
Angenommen, Sie verwenden den Standard Analyzer,
GET
wird erget
im Index gespeichert. Das Quelldokument enthält weiterhin das Original "GET".Die
match
Abfrage wendet denselben Standardanalysator auf den Suchbegriff an und stimmt daher mit dem überein, was im Index gespeichert ist. Dieterm
Abfrage wendet keine Analysatoren auf den Suchbegriff an und sucht daher nur nach diesem genauen Begriff im invertierten Index.Um den Begriff "Abfrage" in Ihrem Beispiel zu verwenden, ändern Sie "GET" in Großbuchstaben in "get" in Kleinbuchstaben oder ändern Sie Ihre Zuordnung so, dass das Feld "request.method" auf "set.method" gesetzt ist
not_analyzed
.quelle
request.method
Feld zu Typkeyword