インデックス作成時に、Luceneはテキストをアトミック単位(トークン)に分割します。この段階では、多くのことが起こる可能性があります(例:小文字の切り詰め、ステミング、ストップワードの削除など)。最終結果は用語です。
クエリを実行すると、Luceneは正確に同じアルゴリズムをクエリに適用します。これにより、用語と用語を一致させることができます。
Q:なぜTermQuery
にアナライザーが必要なのですか?
A:QueryParser
オブジェクトはクエリ文字列を解析し、TermQuery
を生成します(他のタイプのクエリを生成することもできます。たとえば、PhraseQuery
)。 TermQuery
にはすでに索引にあるものと同じ形の用語が含まれています。 (プログラマとして)あなたがしていることを絶対に確信しているならば、TermQuery
を自分で作成することができますが、これはクエリの構文解析の正確なシーケンスを知っていることを前提としています。
Q:なぜBooleanQuery
にアナライザーが必要ですか?
A:BooleanQuery
は、演算子(AND/OR/MUST/SHOULDなど)を使用して他のクエリを結合するだけです。これは、他のクエリがなくても、それ自体有用ではありません。
非常にです。私は読むことを強くお勧めしますIntroduction to Information Retrieval本; Lucene(および他の同様のフレームワーク)が書かれている理論に基づいています。この本は無料でオンラインで入手できます。
アナライザーを指定するのは、照会する文字列を解析するときにのみ必要であり、照会するときには必ずしも指定する必要はないという理由は説明しません。 – haim770
私の答えを編集して、それが十分に明確でないか何かを逃しているかどうか教えてください。 – mindas