elasticsearch match vs term query


73

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:

Geben Sie hier die Bildbeschreibung ein

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.

Geben Sie hier die Bildbeschreibung ein


4
In Begriff Abfrage versuchen ro getin Kleinbuchstaben angeben
Konstantin V. Salikhov

1
Du verstehst, worum es geht. Vielen Dank.
Linlin

Antworten:


101

Angenommen, Sie verwenden den Standard Analyzer, GET wird er getim Index gespeichert. Das Quelldokument enthält weiterhin das Original "GET".

Die matchAbfrage wendet denselben Standardanalysator auf den Suchbegriff an und stimmt daher mit dem überein, was im Index gespeichert ist. Die termAbfrage 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.


7
oder ändern Sie die Zuordnung für das request.methodFeld zu Typkeyword
Johanneke
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.