110

Lucene内のさまざまなアナライザーの違いを誰かに説明してもらえますか?maxClauseCount例外が発生し、KeywordAnalyzerを使用することでこれを回避できることは理解していますが、アナライザーを取り巻く問題を理解せずにStandardAnalyzerから変更したくありません。どうもありがとう。

4

2 に答える 2

212

一般に、Luceneのアナライザーは、トークナイザー+ステマー+ストップワードフィルターです。

Tokenizerはテキストをチャンクに分割します。また、アナライザーごとに異なるトークナイザーを使用する可能性があるため、異なる出力トークンストリーム、つまりテキストのチャンクのシーケンスを取得できます。たとえば、KeywordAnalyzerあなたが言及したように、テキストはまったく分割されず、すべてのフィールドが単一のトークンとして扱われます。同時に、StandardAnalyzer(および他のほとんどのアナライザーは)分割点としてスペースと句読点を使用します。たとえば、「I am very happy」というフレーズの場合、リスト["i"、 "am"、 "very"、 "happy"](またはそのようなもの)が生成されます。特定のアナライザー/トークンライザーの詳細については、そのJavaドキュメントを参照してください。

ステマーは、問題の単語のベースを取得するために使用されます。使用する言語に大きく依存します。たとえば、英語の前のフレーズの場合、["i"、 "be"、 "veri"、 "happi"]のようなものが生成され、フランス語の "Jesuistrèsheureux"の場合、ある種のフランス語アナライザーSnowballAnalyzer( 「フランス語」を使用すると、["je"、 "être"、 "tre"、"heur"]が生成されます。もちろん、ある言語のアナライザーを使用して別の言語のテキストをステミングする場合、他の言語のルールが使用され、ステマーが誤った結果を生成する可能性があります。すべてのシステムで失敗するわけではありませんが、検索結果の精度が低下する可能性があります。

KeywordAnalyzerステマーを使用せず、すべてのフィールドを変更せずに渡します。したがって、英語のテキストでいくつかの単語を検索する場合は、このアナライザーを使用することはお勧めできません。

ストップワードは最も頻繁でほとんど役に立たない単語です。繰り返しますが、それは言語に大きく依存します。英語の場合、これらの単語は「a」、「the」、「I」、「be」、「have」などです。ストップワードフィルターはトークンストリームからそれらを削除して検索結果のノイズを減らします。 「とても幸せ」はStandardAnalyzerリスト["veri"、"happi"]に変換されます。

そしてKeywordAnalyzer再び何もしません。したがって、KeywordAnalyzerIDや電話番号などに使用されますが、通常のテキストには使用されません。

そして、あなたのmaxClauseCount例外については、私はあなたが検索でそれを得ると信じています。この場合、おそらく検索クエリが複雑すぎることが原因です。複数のクエリに分割するか、より低レベルの関数を使用してみてください。

于 2011-03-30T09:28:09.237 に答える
0

私の見解では、私はとを使用StandAnalyzerSmartCNAnalyzerました。中国語でテキストを検索する必要があるので。明らかに、SmartCnAnalyzer中国語の扱いが上手です。さまざまな目的のために、適切なアナライザーを選択する必要があります。

于 2018-09-20T07:14:20.790 に答える