1. 程式人生 > >Solr學習(2)----FieldType總結

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值並賦值。