2015-05-20 17 views
8

Jestem nowy w ES. Mam problem ze znalezieniem dokładnych dopasowań do wyrażenia.wyszukiwanie elastyczne dokładne dopasowanie frazowe

Załóżmy, że mój indeks ma pole o nazwie movie_name. Załóżmy Mam 3 dokumenty z następującymi wartościami

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

Jeśli moje zapytanie wyszukiwania to Mad Max, Chcę, aby pierwsze 2 dokumenty zostały zwrócone, ale nie 3.

Jeśli robię rozwiązanie „not_analyzed” będę się tylko 1 dokument, ale nie 2.

Czego mi brakuje?

Odpowiedz

0

Zastosowanie Phrase matching tak:

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

Próbowałem tego, ale nadal daje to "mad max 3d". Ponieważ dokumentacja mówi "ale przechowuje tylko dokumenty, które zawierają wszystkie wyszukiwane terminy" w moim przypadku oba terminy znajdują się w "mad max 3d". – userab12345

+0

to nazwa_ filmowa analizowanego pola? ponieważ fakt, że zapytanie musi pasować do górnego i dolnego przypadku, można rozwiązać, analizując pole –

+0

tak, przeanalizowano. – userab12345

4

udało mi się to zrobić za pomocą następujących poleceń, w zasadzie utworzenia niestandardowego analizatora, użyj tokenizera słów kluczowych, aby zapobiec tokenizacja. Następnie użyj analizatora w "mapowaniach" dla pożądanego pola, w tym przypadku "nazwa filmu".

 

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

Powiązane problemy