1.9 到 2.0 的改動(dòng)不是很多,主要是廢棄了一些 API , 2.0 起了一個(gè)過(guò)渡的作用。
2.1 是在 2.0 基礎(chǔ)上做了很多的改進(jìn),提升了性能,修復(fù)了一些 Bug 等。
Lucene2.1 在索引的格式上做了一些改進(jìn),所以舊版本的 Lucene 是無(wú)法訪(fǎng)問(wèn) 2.1 版的索引文件。但是 2.1 版本的可以讀寫(xiě)舊版本的索引文件。保持向下的兼容性。這點(diǎn)需要我們?cè)谑褂脮r(shí)注意。
下面簡(jiǎn)單的列出一些新的特性:
1.?????? 's' 和 't' 從默認(rèn)的 stopwords 中移掉了。但是依然還有 'a' 也可以會(huì)有同樣的問(wèn)題,所以分詞需要針對(duì)自己的應(yīng)用進(jìn)行自定義。
2.?????? 更新了 StandardAnalyzer 中的針對(duì) CJK 的 Unicode 代碼范圍。用處不大,因?yàn)槲覀冎形男枰约洪_(kāi)發(fā)分詞。
3.?????? 允許在 QueryParser 的最前面使用通配符 (*, ?) ,之前是不允許的。這個(gè)比較有意義,可以實(shí)現(xiàn)一些模糊搜索。
4.?????? QueryParser 默認(rèn)使用 ConstantScoreRangeQuery 執(zhí)行范圍查詢(xún)。增加了 useOldRangeQuery 屬性允許在需要的情況下使用舊的 RangeQuery
5.?????? 對(duì)于 WildcardQuery ,如果一個(gè) term 不包含任何的 ? 或者 * ,之前會(huì)拋出異常,現(xiàn)在會(huì)執(zhí)行一個(gè) TermQuery 。
6.?????? 去掉了 deprecated 的 doc.fields() 方法和 Enumeration
7.?????? write lock 現(xiàn)在默認(rèn)的位置是索引的目錄,簡(jiǎn)單命名為 write.lock
8.?????? 新的 FieldSelector API ,相關(guān)的 IndexReader 和實(shí)現(xiàn)都發(fā)生了變化。新的 Fieldable 接口被用作字段的延遲加載上。
9.?????? 使用 MultiFieldQueryParser 的時(shí)候可以為不同的 field 指定不同的 boosts
10.?? 新的方法 IndexWriter.addIndexesNoOptimize() 在新添加一個(gè)新的 segments 的時(shí)候,只進(jìn)行合并,不進(jìn)行優(yōu)化。
11.?? QueryParser 允許在引號(hào)和短語(yǔ)中使用反斜線(xiàn)
12.?? 增加了方法 RAMDirectory.sizeInBytes(), IndexWriter.ramSizeInBytes() 和 IndexWriter.flushRamSegments() ,允許應(yīng)用程序控制索引時(shí)緩存文檔對(duì)內(nèi)存的使用,這些蠻有用的,可以用于監(jiān)控索引的過(guò)程。
13.?? QueryParser 解析 *:* 為匹配所有的內(nèi)容
14.?? 可以通過(guò)命令行在已經(jīng)存在的索引文件中修改和刪除 field
15.?? IndexWriter 增加了方法來(lái)高效得更新 documents 。增加 IndexWriter.flush() 方法將內(nèi)存的內(nèi)容刷新到文件系統(tǒng)。
??? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 小兵 2007-3-22
參考:http://www.javaeye.com/topic/70305