1.4.2 solr字段類型
字段類型定義和字段類型屬性
字段類型元素fieldType包含4個信息的類型:name,class-實現類的名稱,analyzer-用於字段類型的分析,字段屬性Field.
schema.xml中定義字段類型
字段類型定義在schema.xml中的types元素下,每個字段類型都在filedType元素之間定義,下面是一個 text_general的例子:
<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" enablePositionIncrements="true" /> <filter class="solr.LowerCaseFilterFactory" /> </analyzer> <analyzer type="query"> <tokenizer class="solr.StandardTokenizerFactory" /> <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true" /> <filter class="solr.LowerCaseFilterFactory" /> </analyzer> </fieldType>
上面例子中的第一行包含了字段類型的名稱text_general,以及對應的實現類solr.TextField,剩下部分定義了字段的分析.
實現類是負責確保該字段的正確處理,在這個class名稱中,字符串solr時 org.apache.solr.schema 或者org.apache.solr.analysis的簡稱.
字段類型屬性
字段類型的class決定了字段類型的大部分行為,但是可選的屬性也可以被定義.如下面的日期類型定義了sortMissingLast和omitNorms兩個屬性.
<fieldType name="date" class="solr.DateField" sortMissingLast="true" omitNorms="true" />
這個字段類型的屬性可以分為三大類:
指定字段類型的類.
常規屬性-solr所有字段類型都支持的屬性.
字段默認屬性-使用
常規屬性
屬性 | 描述 | 值 |
positionIncrementGap | 對於多值字段來說,在多個值之間指定一個距離,預防假的匹配現象. | integer |
autoGeneratePhraseQueries | 對於文本字段,如果為true,solr自動為相鄰詞語生成短語查詢, 如果false,詞語之間必須使用雙引號才被當作短語查詢. |
true或false |
docValuesFormat | 自定義一個DocValuesFormat,用於這個類型的字段,這就需要一個模式感知編碼解碼器(schema-aware), 如solrconfig.xml中定義的SchemaCodecFactory |
n/a |
postingsFormat | 自定義一個PostingsFormat,用於這個類型的字段,這就需要一個模式感知編碼解碼器(schema-aware), 如solrconfig.xml中定義的SchemaCodecFactory |
n/a |
字段默認屬性
屬性 | 描述 | 值 |
indexed | true:字段值可以用於查詢檢索 | true or false |
stored | true:實際字段值在索引中存儲 | true or false |
docValues | true,字段值將被存放在一個一行為主(面向列)docValues結構中. | true or false |
sortMissingFirst sortMissingLast |
如果排序字段不存在時,用於控制文檔的布局.自solr3.5起,這些應用於所有的numeric字段,tri和日期字段. | true or false |
multiValued | true,聲明一個單獨的文檔的字段下可以包含多個值 | true or false |
omitNorms | true,忽略與此字段關聯的規范,對所有的原始字段(不分詞),默認為true.如int,float,data,bool,string.只有文本字段和需要索引時間加權的字段 需要規范(norms). | true or false |
omitTermFreqAndPositions | true,忽略詞語的頻率,位置和位置處的有效負載.對於不需要這些信息的字段,這是一個性能提升,同樣也減少了索引的存儲空間.依賴位置的查詢,發布在使用這個選項上的字段,將無法找到匹配的文檔.這個屬性對所有的非文本字段默認為true. | true or false |
omitPositions | 和omitTermFreqAndPositions相似,但是保存詞語的頻率信息. | true or false |
termVectors termPositions termOffsets |
這些選項指示solr維護每個文檔的全部詞語的向量信息,可選擇的包含每個詞語在這些向量中出現的位置和偏移量信息.這些可以用於 加速高亮和其他輔助功能.但是在索引大小方面增加了相當一部分消耗.對於solr的標准使用來說時沒有必要的. |
true or false |