Lucene 1.9 改進特性列表1.9 RC1
注:lucene2.0發布版本并不是100%的和1.4.3版兼容。也就是說在你用2.0版本的Lucene開發包替換原來的1.4.3版本時,應該讓你的應用程序首先和1.9的兼容。
使用前提:
1. 編譯和使用Lucene需要 Java1.4 或以上版本。
Lucene 1.9 在運行時的變化:
1. 模糊搜索 FuzzyQuery 不再拋出 TooManyClauses 異常。當 FuzzyQuery 擴展多于
BooleanQuery.maxClauseCount 時 ,只有最相關的term會被重新寫入query,因此避免了異常的拋出。
(Christoph)
2. 把系統屬性 "org.apache.lucene.lockdir" 改為 "org.apache.lucene.lockDir"。(Bernhard)
1.9 RC1
注:lucene2.0發布版本并不是100%的和1.4.3版兼容。也就是說在你用2.0版本的Lucene開發包替換原來的1.4.3版本時,應該讓你的應用程序首先和1.9的兼容。
使用前提:
1. 編譯和使用Lucene需要 Java1.4 或以上版本。
Lucene 1.9 在運行時的變化:
1. 模糊搜索 FuzzyQuery 不再拋出 TooManyClauses 異常。當 FuzzyQuery 擴展多于
BooleanQuery.maxClauseCount 時 ,只有最相關的term會被重新寫入query,因此避免了異常的拋出。
(Christoph)
2. 把系統屬性 "org.apache.lucene.lockdir" 改為 "org.apache.lucene.lockDir"。(Bernhard)
3. RangeQueries 和 FuzzyQueries 默認被轉換成小寫。 (as it has been the case for
PrefixQueries and WildcardQueries before).使用
setLowercaseExpandedTerms(false) 來禁止大小寫自動轉換的行為;同樣也影響 PrefixQueries 和
WildcardQueries。(Daniel Naber)
4. 在使用 MultiSearcher 的時候文檔頻率也可以正確計算,全局性的計算各個 subsearchers 和 indices
中。以前計算的時候只是 locally 的,每個 index 的計算是分開的,這樣引發的一個問題是:在多個indices中rank
是不相等的。
(Chuck Williams, Wolf Siberski via Otis, bug #31841)
5. 在打開 IndexWriter 使用 create=true 參數,Lucene
現在只是刪除index目錄中屬于Lucene自己的文件。( 判斷文件名后綴的方式 )。原來是刪除整個目錄中的所有文件。(Daniel
Naber and Bernhard Messer, bug #34695)
6. IndexReader 的版本 ,可以通過 getCurrentVersion() 和 getVersion()
返回。以前如果是新的indexes 那么返回的是0 。現在則用系統的毫秒數來初始化。 (Bernhard Messer via Daniel
Naber)
7. 一些默認的初始化值不再允許通過 system properties 來設置。相反在 IndexWriter 中新增了相關的 set/get 方法來設置相關屬性。主要包括以下屬性:
在 IndexWriter 的 getter/setter 方法中:
org.apache.lucene.writeLockTimeout, org.apache.lucene.commitLockTimeout,
org.apache.lucene.minMergeDocs, org.apache.lucene.maxMergeDocs,
org.apache.lucene.maxFieldLength, org.apache.lucene.termIndexInterval,
org.apache.lucene.mergeFactor,
還有 BooleanQuery 的 getter/setter 方法:
org.apache.lucene.maxClauseCount
還有 FSDirectory 的 getter/setter 方法:
disableLuceneLocks
(Daniel Naber)
8. 修改了 FieldCacheImpl 方法使用用戶提供的 IntParser 和 FloatParser,來替代使用 Integer 和 Float 的相關方法。
(Yonik Seeley via Otis Gospodnetic)
9. 高級搜索返回的 TopDocs 和 TopFieldDocs 不再規范scores。
(Luc Vanlerberghe via Yonik Seeley, LUCENE-469)
1.9 的新特性:
1. 增加了對壓縮字段存儲的支持。(patch #31149)
(Bernhard Messer via Christoph)
2. 增加了對壓縮字段存儲的支持。(patch #29370)
(Bernhard Messer via Christoph)
3. 在 term vectors 中增加了 位置和偏移信息。(Grant Ingersoll & Christoph)
4. 增加了一個新的 DateTools 。允許用戶格式化日期到一種更可讀的格式,以便于更好的適應索引。DateTools 不像
DateFields 類,它允許日期指定到1970年以前,但必須使用指定的日期格式。這樣,在RangeQuerys中使用就更加有效率了。
(Daniel Naber)
5. QueryParser 現在可以正確的和Analyzers 一起工作了,即可以在一個位置返回多個 Token 。 比如:查詢:
“+fast + car”如果 Analyzer 在同一位置返回 car 和 automobile ,那么上面的查詢將被解析成:”+fast
+(car automobile)”。 (Pierrick Brihaye, Daniel Naber)
6. 允許unbuffered的目錄實現。(e.g.,using mmap)。
InputStream 被新類 IndexInput 替換, BufferedIndexInput 和 OutputStream 則被
IndexOutput 和 BufferedIndexOutput。 InputStream 和 OutputStream
已經被廢棄了。FSDirectory 現在是一個子類了。(cutting)
7. 增加了原生 Directory 和 TermDocs 的實現,可以工作在 GCJ 下。GCJ的版本需要 3.4.0 以上。可以使用 ant gcj 來運行例子程序。(cutting)
8. 增加了 MmapDirectory 類,它使用 nio to mmap 輸入文件。現在MmapDirectory
比FSDirectory 要慢些。但他對每個查詢term 使用更少的內存。(cutting & Paul Elschot)
9. 增加 javadocs-internal 到 build.xml – bug #30360
10. 增加了 RangeFileter ,比 DateFilter 更加通用,實用。
(Chris M Hostetter via Erik)
11. 增加了 NumberTools ,一個用來索引數字字段的工具類。 (adapted from code contributed by Matt Quail; committed by Erik)
12. 增加了 public static IndexReader.main(String[] args) 方法。
IndexReader 現在可以直接在命令行方式下使用,用來 列出或者從現存的索引中抽取單獨的文件出來。
(adapted from code contributed by Garrett Rooney; committed by Bernhard)
13. 增加 IndexWriter.setTermIndexInterval() 方法。 (Doug Cutting)
14. 增加 LucenePackage ,這些靜態的 get() 方法返回 java.util.Package。調用者可以用它來獲得 Lucene jar 中的版本信息。
(Doug Cutting via Otis)
15. 增加 Hits.iterator() 方法和相應的 HitIterator 和 Hit 對象。他提供了對 Hits對象標準的 java.util.Iterator 疊代操作。
每個iterator's next() 方法返回一個 Hit 對象。 (Jeremy Rayner via Erik)
16. 增加 ParallelReader,這個一種IndexReader 他合并多個單獨的索引到一個單獨的虛擬索引上。(Doug Cutting)
17. 增加對 FieldCache 的 IntParser , FloatParser 接口, 這樣任何格式的字段可以被以int 和float的形式緩存。
(Doug Cutting)
18. 新增類: org.apache.lucene.index.IndexModifier ,它合并了 IndexWriter 和
IndexReader,好處是我們可以增加和刪除文檔的時候不同擔心 synchronisation/locking 的問題了。 (Daniel
Naber)
19. Lucene 現在可以被用在一個沒有簽名的applet中了,Lucene’s 讀取系統屬性不會拋出 SecurityException 異常。
(Jon Schuster via Daniel Naber, bug #34359)
20. 增加了新類 MatchAllDocsQuery 用來匹配所有文檔。
(John Wang via Daniel Naber, bug #34946)
21. 當索引太多的字段時,為了消減索引大小和內存消耗,提供了忽略規范化字段的功能。
見: Field.setOmitNorms() (Yonik Seeley, LUCENE-448)
22. 增加對 contrib/highlighter 的 NullFragmenter , 這對全文本加亮很有用。
(Erik Hatcher)
23. 增加了正則表達式的查詢: RegexQuery 和 SpanRegexQuery。
(Erik Hatcher)
24. 增加 ConstantScoreQuery 類,它包裝了一個 filter produces a score
equal to the query boost for every matching document.
(Yonik Seeley, LUCENE-383)
25. 增加了 ConstantScoreRangeQuery 類,為某個區間的每個文檔提供一個不變的 score。這個類比普通的
RangeQuery 類的好處是它并不展開到 BooleanQuery ,因此也不存在區間最大term上限。 (Yonik Seeley,
LUCENE-383)
26. 為BooleanQuery增加了最小的匹配短語。見:BooleanQuery.setMinimumNumberShouldMatch().
(Paul Elschot, Chris Hostetter via Yonik Seeley, LUCENE-395)
27. 增加了 DisjunctionMaxQuery 類,提供了針對某個短語的最大score。這一點對多字段的搜索非常有用。
(Luc Vanlerberghe via Yonik Seeley, LUCENE-323)
28. 新增類:ISOLatin1AccentFilter ,用 ISO Latin 1 字符集中的unaccented類字符替代 accented 類字符。 (Sven Duzont via Erik Hatcher)
29. 新增類:KeywordAnalyzer。"Tokenizes" 整個流作為一個單獨的token。這個類對于 郵政編碼,序列號,和產品名稱等比較有用。
(Erik Hatcher)
30. 把 LengthFilter 類從 contrib 放到了 core 代碼里。從 stream 中去掉太長和太短的單詞。 (David Spencer via Otis and Daniel)
31. 增加了 getPositionIncrementGap 方法到 Analyzer 中。這樣用戶自定義的 analyzer
可以在相同字段名的實例之間增加間隙 gaps,用來防止 phrase 和 span 查詢超出邊界。默認的 gap 是 0 。 (Erik
Hatcher, with advice from Yonik)
32. StopFilter 增加了對處理stop words 的忽略大小寫處理。 (Grant Ingersoll via Yonik, LUCENE-248)
33. 增加了 TopDocCollector 和 TopFieldDocCollector。用來簡化實現hit 集合針對 top-scoring 和 top-sorting hits的處理。
API 的改變:
1. 幾個方法和字段已經被廢棄。在API 文檔中包含了建議替換的內容。在這些建議中,這些不建議使用的方法和字段將會在Lucene2.0中被刪除。
(Daniel Naber)
2. Russian 和 German 的 analyzers 被移到了 contrib/analyzers 。
同樣 WordlistLoader 類也被放到了 org.apache.lucene.analysis.WordlistLoader 下 (Daniel Naber)
3. API 包含拋出 IOException 異常的聲明,但是實際上不會拋出。 These declarations have been removed. If
your code tries to catch these exceptions you might need to remove
those catch clauses to avoid compile errors.(Daniel Naber)
4. 為BooleanClause 類的enum 標準參數增加序列化的參數類。 (Christoph)
5. 為 SpanQuery 的子類嵌套其他SpanQuery 增加了 rewrite方法。
Lucene 的源代碼管理器也從cvs 換到了svn:
http://svn.apache.org/repos/asf/lucene/java/trunk
參考資料:
http://blog.csdn.net/accesine960/archive/2006/02/28/612622.aspx
原文地址:
http://svn.apache.org/viewcvs.cgi/*checkout*/lucene/java/branches/lucene_1_9/CHANGES.txt?rev=379190
ExtJS教程-
Hibernate教程-
Struts2 教程-
Lucene教程