Solr學習(2)----FieldType總結
一、介紹
solr在對一個域進行儲存和處理的時候,會根據域資料型別去進行相應的處理,例如Text型別的資料會進行分詞處理,然後在進行索引的建立,並且,使用者可以通過對域的型別進行制定,從而更好的操作查詢得出的資料。Solr允許使用者自定義FieldType(域型別),同時Solr也提供了大量基本的域型別。
二、詳解
1、域型別的屬性
域型別作為一種資料型別,在建立或者定義時可以指定一些預設屬性,該種域型別中的資料在進行索引過程中的相關操作,並且域型別的屬性可以被域繼承,我們可以通過對域型別進行屬性定義後,當域使用該中域型別會,域中的資料也會具有域型別定義的屬性。提示:使用者可以通過域定義覆蓋域型別定義的一些屬性
(1)name
域型別的名稱,作為域型別識別符號存在,在定義域(Field)時使用的型別(FieldType)屬性就是域型別的名稱。
(2)class
域型別的資料型別,該屬性指向的是solr中的已定義的型別,或者是使用者定義的型別,域型別中的資料會被初始化成class執行類類的物件。
(3)positionIncrementGap
當一個域的多值屬性指定為true,則該域中的多值中的每兩個值之間的距離為該屬性指定的值。
(4)autoGeneratePhraseQueries
該屬性只用在Text域型別中。如果設定為true,solr自動將text文字中的相鄰賜予生成短語,如果設定為false的話,如果想識別與短語則需要使用者自己通過雙引號去去指定。
(5)docValueFormat
對該種域型別定義一種使用者自定的資料格式。需要填入一個模式識別的編碼,該便於通過SchemacodecFactory進行識別。
(6)postingsFormat
對該種域型別定義種類自定義的Postiong資料型別,需要填入一個模式識別的編碼,該便於通過SchemacodecFactory進行識別。
下面的屬性屬於域(Field)的屬性,在域型別(FieldType)中定以後,域通過繼承實現這些屬性的預設值:
(7)indexed
是否被索引,true的話進行索引,false則不進行索引
(8)stored
是否進行儲存,true進行儲存,false則不進行儲存
(9)docValues
是否通過使用DocValues結果進行資料儲存。true則進行資料儲存,false則使用docValues結構進行資料儲存
(10)sortMissingFirst/sortMissingLast
控制當排序域的值不存在時該文件(Document)所在佇列的位置。true是則在隊頭/隊尾
(11)multiValued
是否為多值,true則為多值,指定一個文件(Document)中該域含有多個值、如果false,則不含有多個值。
(12)omitNorms
忽略標準屬性,如果為true時,則忽略該域中的長度正常化標註和索引時評分標註,可以節省記憶體。預設情況下所有的非分析欄位都是true。提示:只有Text域或者那些需要索引時評分的域需要規範,會設定成false。
(13)omitTermFreqAndPositions
忽略短語的頻率與位置,如果為true,則忽略文件中的短語的頻率、位置。該屬性在除了TextField以外的其他域都為true。
(14)omitPositions
是否忽略短語的位置。類似於上一個屬性
(15)termVectors/termPositions/termOffsets/termPayload
該屬性指定solr去維護每個文件(Document)中短語的位置、偏移量等資訊。這些屬性也已增加高亮和其他附件條件查詢的效能。但是會提高短語的索引大小。
(16)useDocValuesAsStored
如果docValues屬性被開啟,該屬性設定為true時會儲存該域的所有資料,這樣該資料內容就可以返回,如果false,則無法返回原來的資料。
2、域型別的Similarity
我們在定製一個域型別時,有時會使用定義<similarity/>標籤用來進行將來的評分計算。如果沒有指定的話則使用預設的BM25Similarity類。該標籤這裡不進行研究,只是用來提醒初學者solr擁有一個所搜結果評分機制,來對搜尋結果進行排名。
3、域型別的定義
這個是域型別定義的一個案例
<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<!-- in this example, we will only use synonyms at query time
<filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
-->
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
該域型別的定義中,除了上面提到的屬性以外,還有一些可能用到的標籤(子element)。該定義中,就含有<analyzer/>標籤,來指定該域型別所使用的分析器。2中所提到的similarity也通過子標籤的方式進行定義。
4、Solr所提供的常用域型別(FieldType)
(1)BinaryField
二進位制域型別,該域型別對應二進位制資料。
(2)BoolField
布林型別的域型別,1、t、T,這三個值被認定為true,其他值泉被認定為false。
(3)CollationField
執行Unicode型別的排序和範圍長訓的排序型別。如果使用ICU4J時,ICUCollationField將是一個不錯的選擇。
(4)CurrencyField
貨幣域型別,支援貨幣與匯率轉換。
(5)DateRangeField
日期範圍型別,支援索引資料日誌,包括時間點例項。
(6)ExtendFileField
從硬碟中拖拽一個檔案。
(7)EnumField
允許定義一系列不容易通過字母或數字進行排序的列舉型別的資料。
(8)ICUCollationField
支援用來進行排序和範圍查詢的Unicode排序域型別。
(9)LatLonType
經緯度域型別,用於儲存經緯度資料型別。儲存格式為鍵值對,緯度在第一個。
(10)PointType
點域型別資料,一個N維的點資料型別。例如CAD中點的位置資訊
(11)PreAnalyzedField
該域型別的資料,將會被提供其他方式進行analyze,生成序列環單詞流、獲取儲存資訊與不通過text域型別處理進行索引。
(12)RandomSortField
該型別不含有值,在該域型別上的排序則將會返回一個隨機順序。
(13)SpatialRecursivePrefixFieldType
該屬性主要用於空間查詢,接受緯度,精度格式的字串或者其他wkt格式。
(14)StrField
字串域型別,該字串型別的大小最大為32K,為強限制。
(15)TextFiled
文字型別,含有多個單詞或者符號
(16)TrieDateField
日趨域型別,具有毫秒級精度的資料掉表示。該型別中的屬性precisionStep=0,具有較好的排序效能和最小的索引,precisionStep=8時,具有有效的範圍查詢。
(17)TrieDoubleField
double域型別,和(16)具有同樣的屬性且功能相同。
(18)TrieField
如果使用該域型別,則通過type執行該域型別所使用的資料型別,可選項為:integer、龍、float、double、date。相當於其他幾種域型別。
(19)TrieFloatField、TrieIntField、TrieLongField
(20)UUIDField
唯一ID域型別。當傳入值為NEW時,solr會建立一個新的uuid值並賦值。