1. 程式人生 > >lucene中Field.Index,Field.Store的一些設置

lucene中Field.Index,Field.Store的一些設置

兩個 term 部分 結果 div 無法 compress document 定位

lucene在doc.add(new Field("content",curArt.getContent(),Field.Store.NO,Field.Index.TOKENIZED));

Field有兩個屬性可選:存儲和索引。

通過存儲屬性你可以控制是否對這個Field進行存儲;

通過索引屬性你可以控制是否對該Field進行索引。

事實上對這兩個屬性的正確組合很重要。

Field.IndexField.Store說明
TOKENIZED(分詞) YES 被分詞索引且存儲
TOKENIZED NO 被分詞索引但不存儲
NO YES 這是不能被搜索的,它只是被搜索內容的附屬物。如URL等
UN_TOKENIZED YES/NO 不被分詞,它作為一個整體被搜索,搜一部分是搜不出來的
NO NO 沒有這種用法


個人設置這兩個屬性主要依據還是要看這個Field是否要被索引是否要被存儲,Field內容大小,和個人對其索引的重要性還是占了很大的比重。

註:同一Document下可以針對小的Field建立索引,查詢出內容過大且存儲沒有被索引的Field(按查詢需求設置)。

總結如下:

1.如果要對某Field進行查找,那麽一定要把Field.Index設置為TOKENIZED或UN_TOKENIZED。TOKENIZED會對Field的內容進行分詞;而UN_TOKENIZED不會,只有全詞匹配,該Field才會被選中。

2.如果Field.Store是No,那麽就無法在搜索結果中從索引數據直接提取該域的值,會使null。

補充:

Field.Store.YES:存儲字段值(未分詞前的字段值)
Field.Store.NO:不存儲,存儲與索引沒有關系
Field.Store.COMPRESS:壓縮存儲,用於長文本或二進制,但性能受損

Field.Index.ANALYZED:分詞建索引
Field.Index.ANALYZED_NO_NORMS:分詞建索引,但是Field的值不像通常那樣被保存,而是只取一個byte,這樣節約存儲空間
Field.Index.NOT_ANALYZED:不分詞且索引

Field.Index.NOT_ANALYZED_NO_NORMS:不分詞建索引,Field的值去一個byte保存

TermVector表示文檔的條目(由一個Document和Field定位)和它們在當前文檔中所出現的次數
Field.TermVector.YES:為每個文檔(Document)存儲該字段的TermVector
Field.TermVector.NO:不存儲TermVector
Field.TermVector.WITH_POSITIONS:存儲位置
Field.TermVector.WITH_OFFSETS:存儲偏移量
Field.TermVector.WITH_POSITIONS_OFFSETS:存儲位置和偏移量

lucene中Field.Index,Field.Store的一些設置