簡體   English   中英

lucene過濾器區分大小寫

[英]lucene filter case sensitive

我正在從Lucene 3.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的Filed的值是大寫。 搜索過程如下所示:

  1. QueryParser get字段(文檔對同一個字段有很多值,對於用戶來說是最重要的信息)和關鍵字
  2. 准備具有其他用戶條件的過濾器QueryWrapperFilter(TermQuery(...))
  3. 我從org.apache.lucene.search.Filter覆蓋getDocIdSet,並遍歷所有准備好的Filters,調用filter.getDocIdSet(IndexReader)並收集過濾后的元素。

我發現這與區分大小寫有關 我知道在Lucene 2.4中使用LowerCaseFilter,我所做的是用4.x重建索引,但是現在所有的NOT_ANALYZED值都是小寫的。 然后問題消失了。

對於我的使用3.0.3區分大小寫的解決方案“無關緊要”,而在4.x中則“重要”的原因可能是什么。 也許有些人可以向我解釋幕后發生的事情。

索引編制和分析是兩件事。

分析意味着該字段將通過所選的Analyzer 未分析的字段將按原樣放置在索引中。

如果您對大寫字符串進行索引而不進行分析,則它將在索引中保持大寫形式,並且無法使用小寫查詢找到。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM