私はLuceneQuery
を初めて使用し、生の文字列をQueryParser
.
QueryParser.Parse()
メソッドに Analyzer パラメーターが必要なのはなぜですか?
分析がクエリに関係するものである場合、通常のオブジェクト (など)Analyzer
を扱う場合にも を指定する必要があります。そうでない場合は、なぜそれが必要なのでしょうか?Query
TermQuery
BooleanQuery
QueryParser
私はLuceneQuery
を初めて使用し、生の文字列をQueryParser
.
QueryParser.Parse()
メソッドに Analyzer パラメーターが必要なのはなぜですか?
分析がクエリに関係するものである場合、通常のオブジェクト (など)Analyzer
を扱う場合にも を指定する必要があります。そうでない場合は、なぜそれが必要なのでしょうか?Query
TermQuery
BooleanQuery
QueryParser
インデックスを作成するとき、Luceneはテキストを原子単位(トークン)に分割します。このフェーズでは、多くのことが発生する可能性があります(たとえば、小文字、ステミング、ストップワードの削除など)。最終結果は用語です。
次に、クエリを実行すると、Luceneはクエリにまったく同じアルゴリズムを適用して、用語と用語を一致させることができます。
Q:なぜTermQuery
アナライザーが必要ないのですか?
A:QueryParser
オブジェクトはクエリ文字列を解析して生成しますTermQuery
(たとえば、他のタイプのクエリも生成できますPhraseQuery
)。TermQuery
インデックスにあるのと同じ形の用語がすでに含まれています。(プログラマーとして)自分が何をしているのかを完全に確信している場合は、TermQuery
自分で作成できます。ただし、これは、クエリ解析の正確なシーケンスと、インデックスでの用語の外観を知っていることを前提としています。
Q:なぜBooleanQuery
アナライザーが必要ないのですか?
A:BooleanQuery
演算子(AND / OR / MUST / SHOULDなど)を使用して他のクエリを結合するだけです。他のクエリがなければ、それ自体は実際には役に立ちません。
これは非常に単純化された答えです。情報検索入門書を読むことを強くお勧めします。これには、Lucene(および他の同様のフレームワーク)が記述されている理論が含まれています。この本はオンラインで無料で入手できます。