2015-05-20 20 views
8

Sono nuovo di ES. Sto riscontrando problemi nel trovare corrispondenze esatte per le frasi.ricerca elastica frase esatta corrispondente

Supponiamo che il mio indice abbia un campo chiamato movie_name. Supponiamo Ho 3 documenti con i seguenti valori

  1. MOVIE_NAME = Mad Max
  2. MOVIE_NAME = Mad Max
  3. MOVIE_NAME = Mad Max 3d

Se la mia query di ricerca è Mad Max, Voglio i primi 2 documenti da restituire ma non il 3 °.

Se faccio la soluzione "not_analyzed" Mi metterò unico documento 1, ma non 2.

Che cosa mi manca?

risposta

0

Usa Phrase matching come questo:

{ 
"query": { 
    "match_phrase": { 
     "movie_name": "a" 
    } 
} 
} 
+0

Ho provato questo ma questo restituisce ancora "mad max 3d". Come dice la documentazione "ma conserva solo i documenti che contengono tutti i termini di ricerca" nel mio caso entrambi i termini si trovano in "Mad Max 3d". – userab12345

+0

movie_name è un campo analizzato? perché il fatto che la query deve corrispondere a maiuscole e minuscole può essere risolto analizzando il campo –

+0

sì, analizzato. – userab12345

4

ero in grado di farlo utilizzando i seguenti comandi, fondamentalmente creare un analizzatore personalizzato, utilizzare la parola chiave tokenizzatore per evitare tokenizzazione. Quindi utilizzare l'analizzatore nelle "mappature" per il campo desiderato, in questo caso "movie_name".

 

     PUT /movie 
     { 
     "settings":{ 
     "index":{ 
      "analysis":{ 
       "analyzer":{ 
        "keylower":{ 
        "tokenizer":"keyword", 
        "filter":"lowercase" 
        } 
       } 
      } 
     } 
     }, 
     "mappings" : { 
      "search" : { 
       "properties" : { 
        "movie_name" : { "type" : "string", "analyzer":"keylower" } 
       } 
      } 
     } 
    } 

Problemi correlati