2014-04-18 11 views
46

używam do dopasowania zapytania "request.method": "GET":elasticsearch mecz vs zapytania termin

{ 
     "query": { 
     "filtered": { 
      "query": { 
      "match": { 
       "request.method": "GET" 
      } 
      }, 
      "filter": { 
      "bool": { 
       "must": [ 
... 

Zgodnie z oczekiwaniami, zapytanie Mecz można uzyskać wyniki, jak pokazano poniżej:

enter image description here

Ale pytanie brzmi, kiedy za pomocą zapytania Term, nie ma wyników.

Aktualizacja kwerendy zmienić „dopasowanie” do „termin”, a następnie przechowywać w innej części pozostają takie same:

{ 
    "query": { 
    "filtered": { 
     "query": { 
     "term": { 
      "request.method": "GET" 
     } 
     }, 
     "filter": { 
     "bool": { 
      "must": [ 
... 

myślę zapytanie Term jest „nie przeanalizował” wersja zapytania Meczu . Jak pokazano na powyższym rysunku, przynajmniej jeden rekord ma "request.method" równy "GET". Dlaczego nie ma wyników dla powyższego zapytania Term? Dziękuję Ci.

enter image description here

+4

W zapytaniu termicznym spróbuj podać 'get' pod małą literą –

+1

Dostajesz punkt. Dziękuję Ci. – Linlin

Odpowiedz

61

Zakładając, że są za pomocą Standard AnalyzerGET staje get gdy jest przechowywany w indeksie. Dokument źródłowy nadal będzie miał oryginalne "GET".

Zapytanie o numer match zastosuje ten sam standardowy analizator do wyszukiwanego hasła i dlatego będzie zgodne z tym, co jest przechowywane w indeksie. Kwerenda term nie stosuje żadnych analizatorów do wyszukiwanego hasła, więc będzie wyszukiwać tylko ten dokładny termin w odwróconym indeksie.

Aby użyć terminu zapytanie w swoim przykładzie, zmień wielkie litery "GET" na małe litery "get" lub zmień mapowanie, aby pole request.method było ustawione na not_analyzed.

+0

lub zmień odwzorowanie dla pola 'request.method' na typ' keyword' – Johanneke

Powiązane problemy