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

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

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

經過存儲屬性你能夠控制是否對這個Field進行存儲;索引

經過索引屬性你能夠控制是否對該Field進行索引。文檔

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

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


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

注:同一Document下能夠針對小的Field創建索引,查詢出內容過大且存儲沒有被索引的Field(按查詢需求設置)。table

總結以下:class

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:存儲位置和偏移量

相關文章
相關標籤/搜索