2012-10-11 13 views
29

Ich habe Probleme, das Konzept der Analysatoren in elasticsearch mit Reifen gem zu verstehen. Ich bin eigentlich ein Neuling für diese Suchkonzepte. Kann mir hier jemand mit einem Referenzartikel helfen oder erklären, was die Analysatoren eigentlich machen und warum sie verwendet werden?Analysatoren in elasticsearch

Ich sehe verschiedene Analysatoren bei elasticsearch wie Stichwort, Standard, einfach, Schneeball erwähnt. Ohne das Wissen der Analysatoren konnte ich nicht erkennen, was wirklich zu meinem Bedarf passt.

+4

Ich fand gerade diesen tollen Blog-Beitrag über die Funktionsweise von Analysegeräten in elasticsearch, mit konkreten Beispielen: https://www.found.no/foundation/text-analysis-part-1/ – BrDaHa

+0

Das war wirklich sehenswert Anfänger bis Anfang von mit ... Danke @BrDaHa –

Antwort

68

Lassen Sie mich Ihnen eine kurze Antwort geben.

Ein Analysator wird zur Indexzeit und zur Suchzeit verwendet. Es wird verwendet, um einen Index von Begriffen zu erstellen.

Um eine Phrase zu indizieren, könnte es nützlich sein, sie in Worte zu zerlegen. Hier kommt der Analysator.

Es gilt Tokenizer und Token-Filter. Ein Tokenizer könnte ein Whitespace-Tokenizer sein. Es teilt eine Phrase in Tokens an jedem Platz. Ein Tokenizer in Kleinschreibung teilt eine Phrase in jeden Nicht-Buchstaben- und Kleinbuchstaben-Buchstaben.

Ein Token-Filter wird verwendet, um einige Token zu filtern oder zu konvertieren. Zum Beispiel konvertiert ein ASCII-Faltungsfilter Zeichen wie ê, é, è zu e.

Ein Analysator ist eine Mischung aus all dem.

Sie sollten lesen Analysis guide und schauen Sie auf der rechten Seite alle verschiedenen Optionen, die Sie haben.

Standardmäßig verwendet Elasticsearch den Standardanalysator. Es entfernt alle gängigen englischen Wörter (und viele andere Filter)

Sie können auch die Analyze Api verwenden, um zu verstehen, wie es funktioniert. Sehr hilfreich.

+0

Vielen Dank für die Antwort @dadoonet ... –

+3

Sie können mit [diesem Plugin] (https://github.com/polyfractal/elasticsearch-inquisitor) spielen, um das zu verstehen Analysatoren, Tokenizer, Filter ein bisschen besser. – czerasz

+0

es scheint, es funktioniert nicht für EdgeNGram Tokenizer und Filter –

6

In Lucene, anayzer eine Kombination aus tokenizer ist (Splitter) + stemmer + Stoppwort Filter

In Elasticsearch, Analysator ist eine Kombination aus

  1. Zeichenfilter: „ordentlich up "eine Zeichenfolge, bevor es Tokenize ist. Beispiel: html tags entfernen
  2. Tokenizer: MUSS einen Tokenizer haben. Es wird verwendet, um die Zeichenfolge in einzelne Begriffe oder Token aufzubrechen
  3. Token-Filter: Token ändern, hinzufügen oder entfernen.Stemmer ist ein Token-Filter, es verwendet wird Basis des Wortes zu erhalten, zum Beispiel: "glücklich", "Glück" => "Happi" (Snowball demo)

ich diesen Analysator in meinem Fall verwenden:

 { 
     "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

Hier ist ein tolles Plugin auf github repo. Es ist eine Erweiterung von Analyze API. Fand es auf offiziellen elastischen Plugin list.

Was ist toll ist, dass es Tokens mit all ihren Attributen nach jedem einzelnen Schritt zeigt. Damit ist es leicht, die Konfiguration des Analyzers zu testen und zu sehen, warum wir solche Tokens bekommen haben und wo wir die verloren haben, die wir wollten.

Ich wünschte, ich hätte es früher als heute gefunden. Dank dessen habe ich gerade herausgefunden, warum mein Token Tokenizernicht richtig zu funktionieren scheint. Das Problem wurde durch den nächsten Token-Filter verursacht: icu_transform (für die Transliteration verwendet), der leider das Keyword-Attribut nicht berücksichtigte und alle Tokens umwandelte. Ich weiß nicht, wie sonst würde ich die Ursache finden, wenn nicht für dieses Plugin.