1

Lucene を使用してデータベース内の名前を検索しようとしています。ただし、一部の名前には「NOT」や「OR」、さらには「-」などのマイナス記号が含まれています。名前内のさまざまなトークンをアナライザーを使用して分割し、用語のブール組み合わせとして検索したいのですが、Lucene に「NOT」/「OR」用語を演算子として解釈させたくありません (代わりに、通常の用語と同じように検索してほしい)。

私が話していることを達成する 1 つの方法は、検索クエリでアナライザーを手動で実行し、結果のすべてのトークンに基づいてブールクエリを手動で作成することです。これが最善の方法ですか?アナライザーはクエリパーサーと組み合わせて使用​​するように設計されているという印象を受け、私がやろうとしていることを達成するための組み込みの方法があるべきだと感じています。これを行う最良の方法を知っている人はいますか?

4

1 に答える 1

1

TokenStreamからBooleanQueryを構築するための独自の提案されたアプローチは、完全に理にかなっています。QueryParser APIは、実際には特定の構文を使用して構造化クエリを解析することを目的としています。クエリパーサー構文を利用していない場合は、手動で構築されたBooleanQueryに対してQueryParserを使用する理由はありません。

ただし、StandardAnalyzer(またはStopFilterを備えた別のアナライザー)を使用してフィールドにインデックスを付ける場合、「AND」、「NOT」、「OR」などの単語はインデックスに登録されず、検索できません。したがって、その場合、正規表現を使用して、クエリから「-」や「+」などの単語や演算子を簡単に削除できます。ただし、私はすぐにBooleanQueryアプローチをお勧めします。

于 2009-12-22T21:03:55.833 に答える