2011-09-12 71 views
14

我有一個現有的使用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發佈一個版本嗎?

回答

1

「使用UNLIMITED最安全嗎」。是。該選項與已經創建的文檔無關。

如果您有字符串字段,則不能在其上使用數字範圍。你可以自己檢查一下。