8

私はLuceneQueryを初めて使用し、生の文字列をQueryParser.

QueryParser.Parse()メソッドに Analyzer パラメーターが必要なのはなぜですか?

分析がクエリに関係するものである場合、通常のオブジェクト (など)Analyzerを扱う場合にも を指定する必要があります。そうでない場合は、なぜそれが必要なのでしょうか?QueryTermQueryBooleanQueryQueryParser

4

1 に答える 1

10

インデックスを作成するとき、Luceneはテキストを原子単位(トークン)に分割します。このフェーズでは、多くのことが発生する可能性があります(たとえば、小文字、ステミング、ストップワードの削除など)。最終結果は用語です。

次に、クエリを実行すると、Luceneはクエリにまったく同じアルゴリズムを適用して、用語と用語を一致させることができます。

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

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

これは非常に単純化された答えです。情報検索入門書を読むことを強くお勧めします。これには、Lucene(および他の同様のフレームワーク)が記述されている理論が含まれています。この本はオンラインで無料で入手できます。

于 2013-03-05T14:32:16.837 に答える