2016-05-11 57 views
8

Sto cercando di implementare completamento automatico utilizzando elasticsearch pensando che ho capito come si fa ...Tokenizer vs filtri token

Sto cercando di costruire multi-word (frase) suggerimenti utilizzando edge_n_grams di ES, mentre l'indicizzazione dati scansionati.

Qual è la differenza tra un tokenizer e token_filter - ho letto la documentazione su questi, ma ancora hanno bisogno di più conoscenza su di loro ....

Per esempio è una cosa token_filter utilizza ES per la ricerca contro l'utente ingresso? È un tokenizer ciò che ES utilizza per creare token? Cos'è un token?

È possibile che ES crei suggerimenti di più parole utilizzando una di queste cose?

risposta

31

Un tokenizer divide l'intero input in token e un filtro token applica alcune trasformazioni su ciascun token.

Ad esempio, supponiamo che l'input sia The quick brown fox.Se si utilizza un edgeNGram tokenizer, otterrai i seguenti token:

  • T
  • Th
  • The
  • The (ultimo carattere è uno spazio)
  • The q
  • The qu
  • The qui
  • The quic
  • The quick
  • The quick (ultimo carattere è uno spazio)
  • The quick b
  • The quick br
  • The quick bro
  • The quick brow
  • The quick brown
  • The quick brown (ultimo carattere è uno spazio)
  • The quick brown f
  • The quick brown fo
  • The quick brown fox

Tuttavia, se si utilizza un tokenizzatore standard che dividerà l'ingresso in parole/gettoni, e poi un bordoNGram filtro token, riceverai i seguenti token

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

Come si può vedere, choosi ngram tokenizer o filtro token dipende da come si desidera tagliare e tagliare il testo e come si desidera eseguirne la ricerca.

Suggerisco di dare un'occhiata all'eccellente strumento elyzer che fornisce un modo per visualizzare il processo di analisi e vedere cosa viene prodotto durante ogni passaggio (tokenizzazione e filtraggio token).

A partire da ES 2.2, l'endpoint _analyze supporta anche un explain feature che mostra i dettagli durante ogni fase del processo di analisi.

+0

molte grazie per una spiegazione chiara e concisa – user3125823

+0

Lavoro con ES 1.7 e produce risultati diversi da quelli suggeriti da questa risposta. Un numero di token e token stessi sono identici tra tokenizer e filter: 't, th, the, q, qu, qui, ...' ma offset e posizioni sono diversi. Filter: '{" token ":" qui "," start_offset ": 4," end_offset ": 9," position ": 2}'. Tokenizer: '{" token ":" qui "," start_offset ": 4," end_offset ": 7," position ": 6}' –