Lucene field類 1.x版本和2.x版本比較

(說法一)最近用Lucene開發全文檢索。《Lucene in Action》這本書用的是Lucene 1.4。我自己下的是最新的2.1。然後就發現了很多不同的地方。

Field沒了Keyword、UnIndexed、UnStored、Text這幾個靜態成員,只能用
Field(String, String, Store, Index)。
Keyword對應Field.Store.YES, Field.Index.UN_TOKENIZED,
UnIndexed 對應Field.Store.YES, Field.Index.NO,
UnStored對應Field.Store.NO, Field.Index.TOKENIZED,
Text對應Field.Store.YES, Field.Index.TOKENIZED。

FSDirectory.getDirectory的有兩個參數的變成了depresed 了。現在要用只有一個參數的。

BooleanQuery的add方法也變了。原來是用兩個boolean值組合的,現在 使用BooleanClause.Occur的幾個靜態成員了。

暫時就發現這點差異。[引自:http://syre.blogbus.com/logs/4736803.html]

(說法二)Field類一共有5種構造函數:

Field(String name, byte[] value, Field.Store store)
Create a stored field with binary value.
Field(String name, Reader reader)
Create a tokenized and indexed field that is not stored.
Field(String name, Reader reader, Field.TermVector termVector)
Create a tokenized and indexed field that is not stored, optionally with storing term vectors.
Field(String name, String value, Field.Store store, Field.Index index)
Create a field by specifying its name, value and how it will be saved in the index.
Field(String name, String value, Field.Store store, Field.Index index, Field.TermVector termVector)
Create a field by specifying its name, value and how it will be saved in the index.

其中:

Field.Store 表示“是否存儲”,即該Field內的信息是否要被原封不動的保存在索引中。

Field.Index 表示“是否索引”,即在這個Field中的數據是否在將來檢索時需要被用戶檢索到,一個“不索引”的Field通常僅是提供輔助信息儲存的功能。

Field.TermVector 表示“是否切詞”,即在這個Field中的數據是否需要被切詞。

通常,參數用Reader,表示在文本流數據源中獲取數據,數據量一般會比較大。像鏈接地址URL、文件系統路徑信息、時間日期、人名、居民身份證、電話號碼等等通常將被索引並且完整的存儲在索引中,但一般不需要切分詞,通常用上面的第四個構造函數,第三四個參數分別爲Field.Store.YES, Field.Index.YES。而長文本通常可用第3個構造函數。引用[http://blog.csdn.net/colasnail/archive/2007/03/21/1536417.aspx]

(說法三)

1. 2.0以前的版本

UnIndexed: Field的值將被保存到索引文件,不爲Field的值建立索引,因此不能通過該Field搜索文檔。 UnStored: Field的值不被保存到索引文件,將Field的值分詞後建立索引

Text: Field的值分詞後建立索引。如果參數爲String值將被保存,爲Reader值不被保存
2. 2.0版本
用幾個內部類的組合來區分Field的具體類型。
Store
COMPRESS:壓縮保存。用於長文本或二進制數據
YES:保存
NO:不保存
Index
NO:不建索引
TOKENIZED:分詞,建索引
UN_TOKENIZED:不分詞,建索引
NO_NORMS:不分詞,建索引。但是Field的值不像通常那樣被保存,而是隻取一個byte,這樣節約存儲空間
TermVector
NO:不保存term vectors
YES:保存term vectors。
WITH_POSITIONS:保存term vectors。(保存值和token位置信息)
WITH_OFFSETS:保存term vectors。(保存值和Token的offset)WITH_POSITIONS_OFFSETS:保存term vectors。(保存值和token位置信息和Token的offset)

(說法四)

關於 Field , 2.0.0 版本和 1.4.3 版本方法相比改動比較大,具體見下表

1.4.3 版本中的下面方法都被 Field(String name, String value, Store store, Index index, TermVector termVector) 取代

Keyword(String name, String value) // only version 1.4.3
存儲、索引、不分詞,用於 URI (比如 MSN 聊天記錄的日期域、比如 MP3 文件的文件全路徑等等)
Field(String name, String value, Field.Store.YES, Field.Index.UN_TOKENIZED) // version 2.0.0

UnIndexed(String name, String value) // only version 1.4.3
存儲、不索引、不分詞,比如文件的全路徑
Field(String name, String value,Field.Store.YES, Field.Index.NO)// version 2.0.0

UnStored(String name, String value) // only version 1.4.3
不存儲、索引、分詞,比如 HTML 的正文、 Word 的內容等等,這部分內容是要被索引的,但是由於具體內容通常很大,沒有必要再進行存儲,可以到時候根據 URI 再來挖取。所以,這部分只分詞、索引,而不存儲。
Field(String name, String value,Field.Store.YES, Field.Index.TOKENIZED)// version 2.0.0

Text(String name, String value) // only version 1.4.3
存儲、索引、分詞,比如文件的各種屬性,比如 MP3 文件的歌手、專輯等等。 Field.Store.YES, Field(String name, String value,Field.Index.TOKENIZED)// version 2.0.0

Text(String name, Reader value) // only version 1.4.3

Field(String name, Reader reader) // version 2.0.0
不存儲、索引、分詞。

(說法五)

1. 2.0 以前的版本
Keyword: Field 的值將被保存到索引文件,爲Field的值建立索引,建立索引時不需要分詞。
UnIndexed: Field 的值將被保存到索引文件,不爲Field的值建立索引,因此不能通過該Field搜索文檔。
UnStored: Field 的值不被保存到索引文件,將Field的值分詞後建立索引
Text: Field 的值分詞後建立索引。如果參數爲String值將被保存,爲Reader值不被保存
2. 2.0 版本

用幾個內部類的組合來區分Field的具體類型。

Store
² COMPRESS: 壓縮保存。用於長文本或二進制數據

² YES :保存

² NO :不保存

Index
² NO :不 建索引

² TOKENIZED :分詞, 建索引

² UN_TOKENIZED :不分詞, 建索引

² NO_NORMS :不分詞, 建索引。但是Field的值不像通常那樣被保存,而是隻取一個byte,這樣節約存儲空間

TermVector
² NO : 不保存term vectors

² YES : 保存term vectors。

² WITH_POSITIONS : 保存term vectors。(保存值和token位置信息)

² WITH_OFFSETS : 保存term vectors。(保存值和Token的offset)WITH_POSITIONS_OFFSETS:保存term vectors。(保存值和token位置信息和Token的offset)

(說法六)

* Field.Index有四個屬性,分別是:
Field.Index.TOKENIZED:分詞索引
Field.Index.UN_TOKENIZED:分詞進行索引,如作者名,日期等,Rod Johnson本身爲一單詞,不再需要分詞。
Field.Index:不進行索引,存放不能被搜索的內容如文檔的一些附加屬性如文檔類型, URL等。
Field.Index.NO_NORMS:;
Field.Store也有三個屬性,分別是:
Field.Store.YES:索引文件本來只存儲索引數據, 此設計將原文內容直接也存儲在索引文件中,如文檔的標題。
Field.Store.NO:原文不存儲在索引文件中,搜索結果命中後,再根據其他附加屬性如文件的Path,數據庫的主鍵等,重新連接打開原文,適合原文內容較大的情況。
Field.Store.COMPRESS 壓縮存儲;
termVector是Lucene 1.4.3新增的它提供一種向量機制來進行模糊查詢,很少用。

tags:lucene lucene.net dotlucene field類 Field.store Field.UnStored Field.Keyword Field.Text Field.Index Field.TermVector
轉自:http://hi.baidu.com/gw_noah/blog/item/0646fbc4c3418daa8226ac0c.htm
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章