2012-07-11 17 views
5

Sto usando ElasticSerach e voglio impostare lo stemming di base per l'inglese. Quindi, in sostanza, combattente restituisce lotta o qualsiasi parola che contiene la radice di lotta.ElasticSearch Stemming

Sono un po 'confuso su come implementarlo. Stavo leggendo gli analizzatori, i tokenizer e i filtri e ci sono più algoritmi di derivazione che possono essere usati in ElasticSearch. Non sono sicuro di quale combinazione utilizzare: filtri a palle di neve, stemmer, porter o sinonimi.

Inoltre, un esempio della mappatura sarebbe davvero utile.

risposta

15

Prego il difference between stemming and lemmatisation. L'algoritmo Stemming applica una serie di regole (e/o ricerche nel dizionario, come nel caso ad es. Per KStem) e non garantisce che il risultato sia una "radice" linguale appropriata (cioè lemma).

Così ad esempio entrambe le parole "marinare" e "marines" saranno convertite in "marin" da Porter Stemmer, che è considerato piuttosto "aggressivo" - tende a produrre lo stesso gambo per un gran numero di parole . Ce ne sono di più conservatori, come ad esempio lo S-Stemmer, che converte solo il plurale in forme singolari (org.apache.lucene.analysis.en.EnglishMinimalStemFilter).

I confronti tra i metodi di derivazione trovati nei documenti di ricerca sembrano favorire KStem come il più efficace per i testi in inglese, ma la scelta dello stemmer dipende molto dal vocabolario dei documenti. Non miri a ottimizzare le prestazioni dello stemmer, ma piuttosto le prestazioni del motore di ricerca, quindi misurarlo separatamente dagli altri elementi del tuo sistema (in particolare l'espansione della query) non è una buona idea nella pratica.

La soluzione migliore è provare un numero di stemmer diversi disponibili in elasticsearch (un esempio di mappatura può essere visualizzato here) e osservare la precisione e il richiamo dei risultati. Se non si dispone di una suite di test, la soluzione migliore è eseguire query "tipiche" e fare attenzione ai risultati "strani" (gli effetti dello stelo sono troppo aggressivi) o risultati "buoni" (troppo conservativi Stemmer).