2013-03-05 5 views
6

私はLuceneが初めてで、QueryParserを使用して生の文字列をQueryに解析しようとしています。なぜLucene QueryParserにアナライザが必要ですか

私は、QueryParser.Parse()メソッドにAnalyzerのパラメータが必要なのはなぜですか?同様に、通常のQueryオブジェクトを扱うときに分析が照会に関係している何かが、その後、Analyzerを指定する必要がありますされている場合ではない場合

は(TermQueryは、BooleanQueryなど)、および、なぜQueryParserは、それを必要としていますか?

答えて

10

インデックス作成時に、Luceneはテキストをアトミック単位(トークン)に分割します。この段階では、多くのことが起こる可能性があります(例:小文字の切り詰め、ステミング、ストップワードの削除など)。最終結果は用語です。

クエリを実行すると、Luceneは正確に同じアルゴリズムをクエリに適用します。これにより、用語と用語を一致させることができます。

Q:なぜTermQueryにアナライザーが必要なのですか?
A:QueryParserオブジェクトはクエリ文字列を解析し、TermQueryを生成します(他のタイプのクエリを生成することもできます。たとえば、PhraseQuery)。 TermQueryにはすでに索引にあるものと同じ形の用語が含まれています。 (プログラマとして)あなたがしていることを絶対に確信しているならば、TermQueryを自分で作成することができますが、これはクエリの構文解析の正確なシーケンスを知っていることを前提としています。

Q:なぜBooleanQueryにアナライザーが必要ですか?
A:BooleanQueryは、演算子(AND/OR/MUST/SHOULDなど)を使用して他のクエリを結合するだけです。これは、他のクエリがなくても、それ自体有用ではありません。

非常にです。私は読むことを強くお勧めしますIntroduction to Information Retrieval本; Lucene(および他の同様のフレームワーク)が書かれている理論に基づいています。この本は無料でオンラインで入手できます。

+0

アナライザーを指定するのは、照会する文字列を解析するときにのみ必要であり、照会するときには必ずしも指定する必要はないという理由は説明しません。 – haim770

+0

私の答えを編集して、それが十分に明確でないか何かを逃しているかどうか教えてください。 – mindas

関連する問題