Lucene原始碼解析--Field類

百聯達發表於2013-07-16
Field類:文件中的一個域,在事實上控制著被索引的域值。其組成部分包括type(域的型別),name(域的名稱),fieldsData(域的值),boost(加強因子).
Lucene原始碼解析--Field類
一:域的型別FieldType描述Field的相關屬性。

1.private boolean indexed; 對field是否進行索引操作.

2.private boolean tokenized;是否使用分析器將域值分解成獨立的語彙單元流。該屬性僅當indexed()為ture時有效.

3.private boolean stored;是否儲存field的值。如果true,原始的字串值全部被儲存在索引中,並可以由IndexReader類恢復。該選項對於需要展示搜尋結果的一些域很有用(如URL,標題等)。如果為false,則索引中不儲存field的值,通常用來索引大的文字域值。如Web頁面的正文。

4.private boolean storeTermVectors;當lucene建立起倒排索引後,預設情況下它會儲存所有必要的資訊實施Vector Space Model。該Model需要計算文件中出現的term數,以及他們出現的位置。該屬性僅當indexed為true時生效。他會為field建立一個小型的倒排索引。

5.private boolean storeTermVectorOffsets;表示是否儲存field的token character的偏移量到 term vectors向量中。

6.private boolean storeTermVectorPositions;表示是否儲存field中token的位置到term vectors 向量中。

7.private boolean storeTermVectorPayloads;是否儲存field中token的比重到term vectors中。

8.private boolean omitNorms;是否要忽略field的加權基準值,如果為true可以節省記憶體消耗,但在打分質量方面會有更高的消耗,另外你也不能使用index-time  進行加權操作。

9.private IndexOptions indexOptions;描述什麼可以被記錄到倒排索引當中。
DOCS_ONLY:僅documents被索引,term的頻率和位置都將被忽略。針對field的短語或有關位置的查詢都將丟擲異常。
DOCS_AND_FREQS:documents和term的頻率被索引,term的位置被忽略。這樣可以正常打分,但針對field的短語或有關位置的查詢都將丟擲異常。
DOCS_AND_FREQS_AND_POSITIONS:這是一個全文檢索的預設設定,打分和位置檢索都支援。
DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS:索引字元相對位置的偏移量。

10.private DocValuesType docValueType;DocValues  的型別,如果非空,field的值將被索引成docValues.
NUMERIC:數字型別
BINARY:二進位制型別
SORTED:只儲存不同的二進位制值 byte[]
SORTED_SET.

11.private boolean frozen; 阻止field屬性未來可能的變更,該屬性通常在FieldType   屬性已經被設定後呼叫。是為了防止無意識的變更。

二:Field類的建構函式

1.rotected Field(String name, FieldType type)建立一個無初始值的field.

2.  public Field(String name, Reader reader, FieldType type)
使用Reader而不是String物件來表示域值。在這種情況下,域值是不能被儲存的,並且該域會一直用於分析和索引。請參照TextField

3.public Field(String name, TokenStream tokenStream, FieldType type)使用TokenStream而不是String物件來表示域值。在這種情況下,域值是不能被儲存的,並且該域會一直用於分析和索引。請參照TextField

4. public Field(String name, byte[] value, FieldType type)用二進位制來表示域值,不能被索引。

三:Field子類介紹(部分)
1.StringField:整個string作為一個單獨的分詞token.

2.TextField:A field that is indexed and tokenized, without term
  vectors.  For example this would be used on a 'body'  field, that contains the bulk of a document's text.

3.IntField:索引int值得域,用來進行範圍過濾和排序(使用NumericRangeQuery,NumericRangeFilter,SortField.Type#INT)

4.StoredField:域值儲存到索引,以便查詢的時候進行展示。

5.NumericDocValuesField:每個文件儲存一個long值,用於排序或值檢索。

Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE

Lucene原始碼解析--Field類field.jpg

相關文章