0

Lucene3.0.1から4.1.0に移行しています。数日間の分析の後、これらのバージョンではクエリ結果のフィルタリングに違いがあると思います。移行後、同じクエリとフィルターのクエリ結果に違いが見られます。

物事は次のように見えます:

lucene 3.0.1を使用していましたが、たとえば、IndexWriterのStandardAnalyzerは次のように構成されました。

new StandardAnalyzer(Version.LUCENE_24)

同じ構成がQueryParserに使用されました。NOT_ANALYSED(インデックス付けされていないことを意味します。4.xでは非推奨)のフィールドはほとんどありません。これにより、4.0.0または4.1.0への移行後に問題が発生します。問題は、NOT_ANALYZEDである一部のファイルの値が大文字であるということです。検索プロセスは次のようになります。

  1. QueryParser get Field(ドキュメントには、ユーザーにとって最も重要な情報である、同じフィールドに対する多くの値があります)およびkeyword
  2. 追加のユーザー基準を持つフィルターが用意されていますQueryWrapperFilter(TermQuery(...))
  3. org.apache.lucene.search.FilterからgetDocIdSetをオーバーライドし、filter.getDocIdSet(IndexReader)を呼び出して準備されたすべてのフィルターを反復処理し、フィルター処理された要素を収集します。

大文字と小文字の区別に関して、この回答を見つけました。LowerCaseFilterがlucene2.4で使用されていることを知っています。 私が行ったことは、4.xでインデックスを再構築したことですが、すべてのNOT_ANALYZED値は小文字になりました。その後、問題は消えました。

3.0.3の大文字と小文字の区別を使用した私のソリューションでは、「重要ではない」、4.xでは「重要」である理由は何でしょうか。たぶん、あなた方の何人かは、内部で何が起こっているのかを私に説明することができます。

4

1 に答える 1

0

インデックス作成と分析は 2 つの異なるものです。

分析とは、フィールドがAnalyzer選択されていることを意味します。分析ではないフィールドは、そのままインデックスに配置されます。

分析せずに大文字の文字列にインデックスを付けると、インデックス内で大文字のままになり、小文字のクエリを使用しても検出されません。

于 2013-02-05T14:00:04.623 に答える