2012-10-11 13 views
29

Non riesco a capire il concetto di analizzatore in elasticsearch con gemme di pneumatici. Sono davvero un novizio di questi concetti di ricerca. Qualcuno può aiutarmi con qualche articolo di riferimento o spiegare che cosa fanno realmente gli analizzatori e perché vengono utilizzati?Analizzatori in elasticsearch

Vedo diversi analizzatori menzionati a elasticsearch come parola chiave, standard, semplice, palla di neve. Senza la conoscenza degli analizzatori, non riuscivo a capire cosa rispondesse alle mie esigenze.

+4

In realtà ho appena trovato questo fantastico post sul blog su come gli analizzatori funzionano in elasticsearch, con esempi concreti: https://www.found.no/foundation/text-analysis-part-1/ – BrDaHa

+0

Vale davvero la pena guardare per un principiante per iniziare con ... Grazie @BrDaHa –

risposta

68

Permettetemi di darvi una risposta breve.

Un analizzatore viene utilizzato al momento dell'indice e al tempo di ricerca. È usato per creare un indice di termini.

Per indicizzare una frase, potrebbe essere utile suddividerla in parole. Arriva l'analizzatore.

Si applica tokenizzatori e filtri token. Un tokenizzatore potrebbe essere un tokenizzatore di spazi vuoti. Ha diviso una frase in token in ogni spazio. Un tokenizzatore in minuscolo dividerà una frase per ogni non lettera e tutte minuscole per tutte le lettere.

Un filtro token viene utilizzato per filtrare o convertire alcuni token. Ad esempio, un filtro pieghevole ASCII convertirà caratteri come ê, é, è a e.

Un analizzatore è un mix di tutto ciò.

Si consiglia di leggere Analysis guide e guardare a destra tutte le diverse opzioni che avete.

Per impostazione predefinita, Elasticsearch applica l'analizzatore standard. Rimuoverà tutte le parole inglesi comuni (e molti altri filtri)

Puoi anche utilizzare Analyze Api per capire come funziona. Molto utile.

+0

Grazie mille per la risposta @dadoonet ... –

+3

Puoi giocare con [questo plugin] (https://github.com/polyfractal/elasticsearch-inquisitor) per capire il analizzatori, tokenizer, filtri un po 'meglio. – czerasz

+0

sembra non funzionare per il tokenizer edgeNGram e il filtro –

6

In Lucene, anayzer è una combinazione di tokenizer (splitter) + filtro Stemmer + stopwords

In elasticsearch, analizzatore è una combinazione di

  1. filtro Personaggio: "ordinata su "una stringa prima che sia tokenize. Esempio: rimuovi tag html
  2. Tokenizer: DEVE disporre di un singolo tokenizer. È usato per suddividere la stringa in termini o gettoni individuali
  3. Filtro token: modifica, aggiunta o rimozione di token.Stemmer è un filtro token, viene utilizzato per ottenere base della parola, ad esempio: "felice", "felicità" => "Happi" (Snowball demo)

Io uso questo analizzatore nel mio caso:

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

Rif:

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

Ecco un fantastico plug-in su github repo. È un po 'l'estensione di Analyze API. Trovato sul plugin elastico ufficiale list.

Ciò che è bello è che mostra token con tutti i loro attributi dopo ogni singolo passaggio. Con questo è facile eseguire il debug della configurazione dell'analizzatore e capire perché abbiamo ottenuto questi token e dove abbiamo perso quelli che volevamo.

Vorrei averlo trovato prima di oggi. Grazie a questo ho appena scoperto perché il mio tokenizzatore di token keyword_repeat sembrava non funzionare correttamente. Il problema è stato causato dal filtro token successivo: icu_transform (utilizzato per la traslitterazione) che purtroppo non rispettava l'attributo parola chiave e ha trasformato tutti i token. Non so in quale altro modo avrei trovato la causa se non fosse stato per questo plugin.