2012-10-11 10 views
29

Mam problem ze zrozumieniem koncepcji analizatorów w badaniu elastycznym z klejnotem opony. W rzeczywistości jestem początkującym dla tych koncepcji wyszukiwania. Czy ktoś może mi pomóc z jakimś artykułem referencyjnym lub wyjaśnić, co właściwie robią analizatory i dlaczego są używane?Analizatory w elastycznym badaniu

Widzę różne analizatory wymieniane podczas elastycznego wyszukiwania, takie jak słowo kluczowe, standardowe, proste, śnieżka. Bez znajomości analizatorów nie mogłem zrozumieć, co właściwie pasuje do mojej potrzeby.

+4

Właśnie znalazłem ten świetny wpis na blogu o tym, jak działają analizatory w elastycznym wyszukiwaniu, z konkretnymi przykładami: https://www.found.no/foundation/text-analysis-part-1/ – BrDaHa

+0

To było naprawdę warte obejrzenia początkujący, aby zacząć od ... Dzięki @BrDaHa –

Odpowiedz

68

Pozwól mi dać krótką odpowiedź.

Analizator jest używany w indeksie Czas i czas wyszukiwania. Służy do tworzenia indeksu terminów.

Aby zindeksować wyrażenie, warto podzielić je na słowa. Tutaj przychodzi analizator.

Dotyczy tokennizy i filtry tokenów. Tokenizer może być tokenizerem typu Whitespace. Dzielił frazę na żetony w każdej przestrzeni. Mimozownik pisany małymi literami podzieli frazę na każdą literę bez litery i na małe litery.

Filtr tokenu służy do filtrowania lub konwersji niektórych tokenów. Na przykład filtr fałdowania ASCII konwertuje znaki takie jak ê, é, è na e.

Analizator jest mieszanką tego wszystkiego.

Powinieneś przeczytać i przejrzeć wszystkie dostępne opcje.

Domyślnie funkcja Elasticsearch stosuje standardowy analizator. Usunie wszystkie popularne angielskie słowa (i wiele innych filtrów)

Możesz również użyć Analyze Api, aby zrozumieć, jak to działa. Bardzo przydatne.

+0

Wielkie dzięki za odpowiedź @dadoonet ... –

+3

Możesz grać za pomocą [tej wtyczki] (https://github.com/polyfractal/elasticsearch-inquisitor), aby zrozumieć analizatory, tokenizery, filtry trochę lepiej. – czerasz

+0

wydaje się, że to nie działa dla tokenizera edgeNGram i filtra –

6

W Lucene, anayzer jest połączeniem tokenizera (splitter) + rdzeni + stopword filtr

W ElasticSearch analizator jest połączeniem

  1. filtr znaków „uporządkowane w górę "ciąg przed tokenem. Przykład: usunięcie znaczników html
  2. Tokenizer: MUSI mieć pojedynczy tokenizer. Służy do rozbijania ciągu na pojedyncze terminy lub tokeny.
  3. Filtr Token: zmiana, dodanie lub usunięcie tokenów.Stemmer jest filtrem tokenu, jest on stosowany, aby uzyskać bazę słowa, na przykład: „szczęśliwy”, „szczęście” => „happi” (Snowball demo)

Używam tego analizatora w moim przypadku:

 { 
     "settings":{ 
     "index" : { 
      "analysis" : { 
       "analyzer" : { 
        "analyzerWithSnowball" : { 
         "tokenizer" : "standard", 
         "filter" : ["standard", "lowercase", "englishSnowball"] 
        } 
       }, 
       "filter" : { 
        "englishSnowball" : { 
         "type" : "snowball", 
         "language" : "english" 
        } 
       } 
      } 
     } 
     } 
    } 

Ref:

  1. Comparison of Lucene Analyzers
  2. http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/custom-analyzers.html
0

Oto niesamowita wtyczka na github repo. Jest to nieco rozszerzenie Analyze API. Znalazłem go na oficjalnej elastycznej wtyczce list.

To, co najlepsze, to pokazywanie żetonów ze wszystkimi ich atrybutami po każdym kroku. Dzięki temu łatwo jest debugować konfigurację analizatora i zobaczyć, dlaczego mamy takie żetony i gdzie straciliśmy te, które chcieliśmy.

Szkoda, że ​​znalazłem go wcześniej niż dzisiaj. Dzięki temu właśnie dowiedziałem się, dlaczego mój tokenizer keyword_repeat wydawał się nie działać poprawnie. Problem został spowodowany przez następny filtr tokenu: icu_transform (używany do transliteracji), który niestety nie respektował atrybutu słowa kluczowego i nie transformował wszystkich tokenów. Nie wiem, jak inaczej mógłbym znaleźć przyczynę, gdyby nie ta wtyczka.

Powiązane problemy