2016-05-11 9 views
8

Ich versuche, die automatische Vervollständigung zu implementieren mit Elasticsearch denkt, dass ich zu verstehen, wie es zu tun ...Tokenizer vs Token Filter

I unter Verwendung von EUs edge_n_grams während Indizierung Multi-Wort (Phrase) Vorschläge zu bauen bin versucht, gecrawlte Daten

Was ist der Unterschied zwischen einem tokenizer und einem token_filter - Ich habe die Dokumentation auf diese lesen, aber noch mehr Verständnis brauchen auf sie ....

Zum Beispiel ein token_filter ist, was ES gegen Benutzer suchen verwendet Eingang? Ist ein Tokenizer, was ES verwendet, um Tokens zu erstellen? Was ist ein Token?

Ist es für ES möglich, Vorschläge für mehrere Wörter zu erstellen, die eines dieser Dinge verwenden?

Antwort

31

Ein Tokenizer teilt die gesamte Eingabe in Token auf, und ein Token-Filter wendet eine Transformation für jedes Token an.

Nehmen wir zum Beispiel an, der Eingang ist The quick brown fox.Wenn Sie eine edgeNGram tokenizer verwenden, werden Sie die folgenden Token erhalten:

  • T
  • Th
  • The
  • The (letzte Zeichen ist ein Leerzeichen)
  • The q
  • The qu
  • The qui
  • The quic
  • The quick
  • The quick (letzte Zeichen ist ein Leerzeichen)
  • The quick b
  • The quick br
  • The quick bro
  • The quick brow
  • The quick brown
  • The quick brown (letzte Zeichen ist ein Leerzeichen)
  • The quick brown f
  • The quick brown fo
  • The quick brown fox

Wenn Sie jedoch einen Standard tokenizer verwenden, die die Eingabe in Worte/Token wird geteilt, und dann ein edgeNGram Token Filter, erhalten Sie die folgenden Token

  • T, Th, The
  • q, qu, qui, quic, quick
  • b, br, bro, brow, brown
  • f, fo, fox

Wie Sie sehen können, choosi zwischen einem edgeNgram Tokenizer oder Token-Filter hängt davon ab, wie Sie Ihren Text in Scheiben schneiden und würfeln und wie Sie es suchen möchten.

Ich schlage vor, einen Blick auf das ausgezeichnete Werkzeug elyzer zu werfen, das eine Möglichkeit bietet, den Analyseprozess zu visualisieren und zu sehen, was während jedes Schrittes erzeugt wird (Tokening und Token-Filterung).

Ab ES 2.2 unterstützt der _analyze Endpunkt auch einen explain feature, der die Details während jedes Schritts des Analyseprozesses zeigt.

+0

vielen dank für eine klare und prägnante erklärung – user3125823

+0

Ich arbeite mit ES 1.7 und es produziert andere Ausgabe als was diese Antwort vorschlägt. Eine Anzahl von Tokens und Token selbst ist zwischen Tokenizer und Filter identisch: 't, th, the, q, qu, qui, ...' aber Offsets und Positionen sind unterschiedlich. Filter: '{" token ":" qui "," start_offset ": 4," end_offset ": 9," position ": 2}'. Tokenizer: '{" token ":" qui "," start_offset ": 4," end_offset ": 7," position ": 6}' –

Verwandte Themen