我有一個現有的使用Lucene 2.2.x的軟件,我需要升級到3.1。要進行此升級,我已閱讀文檔,建議首先升級到2.9.x,刪除所有棄用警告,然後升級到3.1.x.我已經部署了現有的索引,我需要保持代碼兼容。將Lucene從2.2升級到2.9到3.1的問題
我的主要問題來處理日期。在2.2.x中,我必須使用DateTools.dateToString()將Date.getTime()轉換爲可以索引和存儲的字符串。我在每個文檔上創建了兩個字段。一個用於搜索以Hour分辨率存儲的數據,另一個用於未分析的字段。現在Lucene 2.9.x支持不同於string的其他數據類型。如果這些新類型與使用DateTools將日期轉換爲字符串的先前版本相比較,可以在RangeQueries中使用這些新類型嗎?這裏是代碼我改變了它太:
前:
return new RangeFilter("dateArchived-stored",
DateTools.dateToString(start, DateTools.Resolution.MILLISECOND),
DateTools.dateToString(end, DateTools.Resolution.MILLISECOND),
false, true);
後:
return NumericRangeFilter.newLongRange("dateArchived-stored",
start.getTime(),
end.getTime(), true, true);
現在Lucene支持非字符串數據類型做,我們必須與日期的分辨率關注正如我們對術語查詢做的那樣?
IndexWriter需要聲明一個MaxFieldLimit。以前的版本沒有。是否使用UNLIMITED與以前版本中的行爲相同?使用UNLIMITED是否最安全,因爲我將閱讀的索引是使用2.2創建的?
前:
new IndexWriter(indexDirectory, analyzer)
後:
new IndexWriter(FSDirectory.open(indexDirectory), analyzer, true, IndexWriter.MaxFieldLength.UNLIMITED)
排序對象需要申報的SortField這需要一個類型的字段。對於使用2.2.x版本索引的現有字段,我們是否可以將之前索引爲String的字段聲明爲另一種類型,或者它們是否總是SortField.STRING?
前:
new Sort("timestamp", false)
後:
new Sort(new SortField("timestamp", SortField.LONG, false))
將這項工作與內置的2.2.x的指標,但2.9.x讀?
最後,在2.2.x中建立索引時,我會直接進入3.1.x嗎?我將在本地開發系統上轉換到2.9.x,但在該領域將從2.2.x直接轉到3.1.x.我需要使用2.9.x發佈一個版本嗎?