2013-04-10 21 views
34

Patrzyłem na http://euphonious-intuition.com/2012/08/more-complicated-mapping-in-elasticsearch/ , który wyjaśnia analizatory ElasticSearch.Elastic search-search_analyzer vs index_analyzer

Nie rozumiem, że chodzi o różne analizatory wyszukiwania i indeksowania. Drugim przykładem niestandardowego mapowania idzie tak:
-> analizator wskaźnik jest edgeNgram
-> analizator wyszukiwania to:

"full_name":{ 
    "filter":[ 
     "standard", 
     "lowercase", 
     "asciifolding" 
    ], 
    "type":"custom", 
    "tokenizer":"standard" 
} 

jeśli chcieliśmy zapytaniu „rasa” nie zwracają wyniki takich jak * ra * pport i * rac * ial ze względu na edgeNgram, dlaczego indeksować go za pomocą edgeNgram w pierwszej kolejności?

Proszę wyjaśnić na przykładzie, gdzie różne analizatory są przydatne.

+1

Czy mogę wiedzieć, czy moja odpowiedź sprawiła, że ​​sprawy stały się bardziej przejrzyste? – javanna

+0

Link na górze jest zepsuty – Artem

Odpowiedz

73

Zazwyczaj podobny łańcuch analizy występuje zarówno w czasie indeksowania, jak i w zapytaniu. Podobny nie oznacza dokładnie to samo, ale zazwyczaj sposób indeksowania dokumentów odzwierciedla sposób ich wyszukiwania.

Przykład ngrams jest naprawdę dobrym rozwiązaniem, ponieważ jest to jeden z głównych powodów, dla których używałbyś różnych analizatorów w czasie indeksowania i zapytania.

ciągu znaków indeksowania z ngrams krawędzi tak, że "elasticsearch" staje się (z mingram 3 i maxgram 20):

"Ela", "ELAS", "elast", "Elasti", "elastyczny "," elastics "," elasticse "," elasticsea "," elasticsear "," eleasticsearc "i" elasticsearch "

Przeszukamy teraz utworzone pole. Jeśli zapytamy o termin "elastyczny", mamy do czynienia z dopasowaniem i uzyskamy oczekiwany wynik. Zasadniczo staliśmy się tym, co nazwaliśmy powyżej częściowym dopasowaniem ścisłego dopasowania, biorąc pod uwagę to, co zindeksowaliśmy. Nie ma również potrzeby stosowania ngramsów do zapytania. Jeśli my chcemy zapytać o wszystkich następujących warunków:

„Ela”, „ELAS”, „ELAST”, „ELASTI” i „elastyczny”

która stałaby droga zapytanie bardziej skomplikowana i doprowadzi również uzyskać dziwne wyniki. Powiedzmy, że indeksujesz termin "upłynął" w innym dokumencie, w tym samym polu. Można by mieć następujące ngrams:

„ela”, „elap”, „elaps”, „upłynąć”, „upłynął”

Jeśli szukasz „elastyczny” i uczynić ngrams do zapytania, termin "ela" pasowałaby również do tego drugiego dokumentu, więc odzyskałbyś go razem z pierwszym dokumentem, nawet jeśli żadne warunki nie zawierają całego "elastycznego" terminu, którego szukałeś.

Proponuję zapoznać się z analyze api, aby obejrzeć różne analizatory i ich różne wyniki.

+1

Dziękuję, odpowiedź sprawiła, że ​​sprawy stały się jaśniejsze :) –

+1

[This] (https://github.com/polyfractal/elasticsearch-inquisitor) plugin elasticsearch pomaga bardzo sprawdzić działanie różnych analizatorów. – gsk

+0

@gsk Bardzo dziękuję, bardzo dziękuję za wspomnianą wtyczkę. To bardzo pomocne, aby zobaczyć, jak moje dane są indeksowane wewnątrz elastycznego wyszukiwania. –

7

Aby odwołać the official documentation about index vs search analyzers:

Czasami warto użyć innego analizatora w indeksie i czasu wyszukiwania. Na przykład w czasie indeksowania możemy chcieć indeksować synonimów, np. Dla każdego wystąpienia szybkiego indeksujemy również szybko, szybko i szybko. Ale w czasie wyszukiwania nie musimy wyszukiwać wszystkich tych synonimów.Zamiast tego możemy po prostu sprawdzić jedno słowo wprowadzone przez użytkownika , szybkie, szybkie, szybkie lub szybkie.

Aby włączyć to wyróżnienie, funkcja Elasticsearch obsługuje również parametry index_analyzer i search_analyzer i analizatory o nazwach default_index i default_search.

Biorąc te dodatkowe parametry pod uwagę, pełna sekwencja na indeks czasie naprawdę wygląda następująco:

  • index_analyzer zdefiniowane w odwzorowaniu pola, inny
  • analizator zdefiniowane w odwzorowaniu pola, inny
  • analizator zdefiniowane w polu _analyzer dokumentu, inny
  • domyślny index_analyzer dla typu, który domyślnie
  • domyślny analizator dla typu, który domyślnie
  • analizator o nazwie Default_index w ustawieniach indeksu, który domyślnie
  • domyślnie analizator nazwany w ustawieniach indeksu, który domyślnie
  • analizatora nazwie Default_index w węźle poziom, który domyślnie
  • analizator o nazwie domyślnej na poziomie węzła, który domyślnie
  • średnia analizatora

iw czasie wyszukiwania:

  • analizatora określone w samej zapytania, innego
  • w search_analyzer zdefiniowanego w mapowaniu pola, inaczej
  • analizatora zdefiniowanego w mapowaniu pola, inaczej
  • domyślny search_analyzer dla typu, domyślnie do
  • domyślny analizatora dla danego typu, który domyślnie
  • analizator o nazwie Wyślij hasło w ustawieniach indeksu, który domyślnie
  • Analyz er nazwie domyślny w ustawieniach indeksu, który domyślnie
  • analizator o nazwie Wyślij hasło na poziomie węzła, który domyślnie
  • analizator o nazwie domyślnie na poziomie węzła, który domyślnie do
  • średnia analizatora
Powiązane problemy