2012-07-11 14 views
5

私はElasticSerachを使用しています。英語の基本的なステミングを設定したいと思います。だから基本的に、戦闘機は戦いを返します。ElasticSearchステミング

私は少しこれを実装する方法が混乱しています。私はアナライザ、トークナイザ、フィルタを読み込み、ElasticSearchで使用できる複数のステミングアルゴリズムがあります。スノーボール、ステマー、ポーター・ステム、シノニム・フィルターのどの組み合わせを使うべきか分かりません。

また、マッピングの例は本当に役に立ちます。

答えて

15

difference between stemming and lemmatisationを覚えておいてください。ステムミングアルゴリズムは、一連のルール(および/または例えばKStemの場合のような辞書ルックアップ)を適用し、結果が適切な雑音のある「ルート」(すなわち補助定理)になることを保証しない。

例えば、「マリネイト」と「海兵隊員」の両方の単語は、ポーターステマーによって「マリン」に変換されます。これは、かなり「アグレッシブ」なものと考えられています。 。 S-Stemmerのように、複数形から単数形に変換するだけのより保守的なものがあります(org.apache.lucene.analysis.en.EnglishMinimalStemFilter)。

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

最も良い解決策は、elasticsearch(例のマッピングはhereで見ることができます)で利用可能ないくつかの異なるステマーを試し、結果の精度とリコールを観察することです。テストスイートを持っていない場合は、「典型的な」クエリを実行して、「奇妙な」結果(注意深すぎる結果が得意である)や「良い」結果が目立たない(あまりにも保守的ステマー)。