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である一部のファイルの値が大文字であるということです。検索プロセスは次のようになります。
- QueryParser get Field(ドキュメントには、ユーザーにとって最も重要な情報である、同じフィールドに対する多くの値があります)およびkeyword
- 追加のユーザー基準を持つフィルターが用意されていますQueryWrapperFilter(TermQuery(...))
- org.apache.lucene.search.FilterからgetDocIdSetをオーバーライドし、filter.getDocIdSet(IndexReader)を呼び出して準備されたすべてのフィルターを反復処理し、フィルター処理された要素を収集します。
大文字と小文字の区別に関して、この回答を見つけました。LowerCaseFilterがlucene2.4で使用されていることを知っています。 私が行ったことは、4.xでインデックスを再構築したことですが、すべてのNOT_ANALYZED値は小文字になりました。その後、問題は消えました。
3.0.3の大文字と小文字の区別を使用した私のソリューションでは、「重要ではない」、4.xでは「重要」である理由は何でしょうか。たぶん、あなた方の何人かは、内部で何が起こっているのかを私に説明することができます。