6

I am using ElasticSerach and I want to setup basic stemming for English. So basically, fighter returns fight or any word that contains the fight root.

I am a little confused how to implement this. I was reading through the analyzers, tokenizers and filters and there are multiple stemming algorithms that can be used in ElasticSearch. I am just not sure which combination to use - snowball, stemmer, porter stem or synonym filters.

Also, an example of the mapping would be really helpful.

4

1 に答える 1

16

ステミングとレンマタイゼーションの違いに注意してください。ステミング アルゴリズムは、一連のルール (および/または KStem などの場合のように辞書検索) を適用し、結果が適切な言語の「ルート」(つまりレンマ) になることを保証しません。

したがって、たとえば、'marinate' と 'marines' の両方の単語は、Porter Stemmer によって 'marin' に変換されますが、これは非常に「攻撃的」なものと見なされています。これは、多数の単語に対して同じ語幹を生成する傾向があります。より保守的なものもあります。たとえば、S-Stemmer は複数形から単数形への変換のみを行います ( org.apache.lucene.analysis.en.EnglishMinimalStemFilter)。

研究論文に見られるステミング方法の比較では、KStem が英語のテキストに最も効果的であるように思われますが、ステマーの選択はドキュメントの語彙に大きく依存します。ステマーのパフォーマンスを最適化するのではなく、検索エンジンのパフォーマンスを最適化することを目的としているため、システムの他の要素 (特にクエリ拡張) から分離して測定することは、実際には良い考えではありません。

最善の解決策は、elasticsearch で利用できるさまざまなステマーを試して (マッピングの例をここで見ることができます)、結果の適合率と再現率を観察することです。クエリのテスト スイートがない場合は、「典型的な」クエリを実行し、「奇妙な」結果 (ステマーの影響が積極的すぎる) または省略された「良い」結果 (保守的すぎる) に注意することをお勧めします。ステムマー)。

于 2012-07-11T15:24:17.300 に答える