lucene索引日期和數字


1.用途。

    索引數字的場景主要有兩種:一是把它們當作字符串一樣處理,比如“要是擱以前,術士能暴擊10000多,有木有!”中的"10000",它和其它的詞沒什么區別,你可以把它僅僅想成一個字符串;另一種場景則是某個域只索引數字,且可以搜索數字的范圍等,比如設計了某個Field存儲郵件的大小,現在要搜索大小在3M-10M的郵件。

    對於第一種情況,你要做的僅僅是選一個不會對數字進行分詞的分析器。這種分析器很多,比如之前我們用過的WhitespaceAnalyzer和StandardAnalyzer。當然WhitespaceAnalyzer分析器可能僅僅對英語之類的語言還有點用處。對於第二種情況,你不需要為這些專門設計用來存儲數字的域進行分詞,指定成Field.Index.NOT_ANALYZED就可以了。不過你必須清楚的是,Lucene內部處理的仍然只是String類型!即"10"是排在"2"前面的!若是想支持范圍搜索,你需要為數字增加前置0, 即需要索引"02",這樣"02"便排在"10"前面了!

doc.add(new NumericField("attachs",Field.Store.YES,true).setIntValue(attachs[i]));   
doc.add(new NumericField("date",Field.Store.YES,true).setLongValue(dates[i].getTime()));  

 

2.  索引數字的場景主要有兩種:一是把它們當作字符串一樣處理,比如“要是擱以前,術士能暴擊10000多,有木有!”中的"10000",它和其它的詞沒什么區別,你可以把它僅僅想成一個字符串;另一種場景則是某個域只索引數字,且可以搜索數字的范圍等,比如設計了某個Field存儲郵件的大小,現在要搜索大小在3M-10M的郵件。

    對於第一種情況,你要做的僅僅是選一個不會對數字進行分詞的分析器。這種分析器很多,比如之前我們用過的WhitespaceAnalyzer和StandardAnalyzer。當然WhitespaceAnalyzer分析器可能僅僅對英語之類的語言還有點用處。對於第二種情況,你不需要為這些專門設計用來存儲數字的域進行分詞,指定成Field.Index.NOT_ANALYZED就可以了。不過你必須清楚的是,Lucene內部處理的仍然只是String類型!即"10"是排在"2"前面的!若是想支持范圍搜索,你需要為數字增加前置0, 即需要索引"02",這樣"02"便排在"10"前面了!

 

 

3。日期類型的使用場景可謂多之又多:郵件的寄出、收到日期;文件的創建日期、最后修改日期;HTTP響應中的最后修改日期等等。總之,絕大多數情況下,你會有處理日期的遭遇!Don't worry! Lucene為我們裝備了一個處理日期的利器:DateTools. 通過它,我們可以便捷的把Date型轉換成String型

//轉自:BuN_Ny
//http://bun-ny.iteye.com/blog/1075632

Document doc = new Document(); doc.add(new Field("indexDate", DateTools.dateToString(new Date(), DateTools.Resolution.DAY), Field.Store.YES, Field.Index.NOT_ANALYZED));

 DateTools 可以把日期和時間轉換成 YYYYMMDDhhmmss 的格式,並根據指定的resolution去除相應后綴。比如你指定了Resolution.DAY,2012年12月21日就會被轉換成20121221,時分秒部分會被去除掉。這么一來,就很容易發現,即便是按字符串進行排序、比較,也能得到和日期相同的效果。字符串"20121221"是大於"20121121"的,而其對應的日期也是如此。采用這種方式處理日期是不是很簡單?參數resolution允許你截取對你的應用有意義的日期部分,精確度從Resolution.MILLISECOND(毫秒)到Resolution.YEAR(年),但是值得注意的是,更高的精度就需要付出更大的代價!

    提醒你一下,如果你的應用中需要搜索一個YYYYMMDD范圍內的數據,而在展示的時候又希望把時間部分(hhhmmss)也帶上,你可以嘗試創建兩個域,一個索引到Resolution.DAY范圍,另一個僅僅設置Store.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM