2

私は個人的なプロジェクトで Lucene.Net を使用しており、ケースを処理する必要がありますが、同じタイプのクエリを使用して lucene が 2 つのケースを処理する良い方法が見つかりません。

基本的なクエリは、MultiFieldQueryParser を StandardAnalyzer と NumericRangedFilter と共に使用して、日付でフィルター処理します (日付は長い値として保存されます)。

問題は、空の検索文字列用とユーザーが検索文字列を入力するための 2 つの異なるクエリ パーサーを使用せずに、空の検索文字列をフィルターで処理することです。現在、空の文字列が使用されると、MultiFieldQueryParser は ParseException をスローします。

これを処理する最善の方法について何かアドバイスはありますか? それとも、これは Lucene または Lucene.Net の (意図的またはその他の) 欠陥ですか?

結果

クエリ文字列が空の場合はMatchAllDocsQueryを使用し、それ以外の場合は通常のクエリを使用しました。

また、NumericFields と NumericRangeFilter の使用を削除する必要がありました。クエリを使用しても結果が返されなかったためです。文字列と通常のRangeFilterを使用して、古い方法で日付範囲フィルターを実行することになりました。

4

1 に答える 1

4

これを処理する最善の方法はMatchAllDocsQuery、入力が空の文字列の場合、 を生成してパーサーをバイパスすることです。

http://lucene.apache.org/core/old_versioned_docs/versions/2_9_4/api/all/org/apache/lucene/search/MatchAllDocsQuery.html

于 2012-09-09T20:43:36.117 に答える