2014-04-18 29 views
46

Io uso la ricerca di corrispondenza della query per "request.method": "GET":partita elasticsearch vs interrogazione termine

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

Come previsto, la query Partita può ottenere i risultati, come illustrato di seguito:

enter image description here

Ma la domanda è quando si utilizza la query Term, non ci sono risultati.

Aggiornare la query per cambiare il "match" a "termine", e tenere l'altra parte rimane la stessa:

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

penso che la query termine è la versione "non analizzato" della query Partita . Come mostrato nell'immagine sopra, c'è almeno un record che ha "request.method" uguale a "GET". Perché non ci sono risultati per la query Term sopra menzionata? Grazie.

enter image description here

+4

In termine query prova ro specificare 'get' in lettere minuscole –

+1

Si ottiene il punto. Grazie. – Linlin

risposta

61

Supponendo che si sta utilizzando il Standard AnalyzerGET diventa get se conservato nell'indice. Il documento di origine avrà ancora l'originale "GET".

La query match applicherà lo stesso analizzatore standard al termine di ricerca e quindi corrisponderà a ciò che è memorizzato nell'indice. La query term non applica alcun analizzatore al termine di ricerca, quindi cercherà solo quel termine esatto nell'indice invertito.

Per utilizzare il termine query nel proprio esempio, modificare il maiuscolo "GET" in minuscolo "get" o modificare la mappatura in modo che il campo request.method sia impostato su not_analyzed.

+0

o modifica la mappatura per il campo 'request.method' per digitare' keyword' – Johanneke

Problemi correlati