Solr字段類型的定義和屬性

2022-03-02 09:35 更新

Solr 字段類型定義在對文檔進(jìn)行索引或向索引發(fā)送查詢時(shí)將在字段上發(fā)生的分析。

字段類型定義可以包括以下四種類型的信息:

  • 字段類型的名稱(必填)。
  • 一個(gè)實(shí)現(xiàn)類的名字(必填)。
  • 如果一個(gè)字段的類型是 TextField,則為字段類型的字段分析說明。
  • 字段類型屬性取決于實(shí)現(xiàn)類,一些屬性可能是強(qiáng)制性的。

schema.xml 中的字段類型定義

字段類型在 schema.xml 中定義。每個(gè)字段類型在 fieldType 元素之間定義。他們可以有選擇地分組在一個(gè) types 元素中。下面是一個(gè)名為 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" />
    <!-- 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>

關(guān)于上述代碼的提示信息:

  1. 上述實(shí)例的第一行包含字段類型名稱、text_general 和實(shí)現(xiàn)類的名稱 solr.TextField。
  2. 定義的其余部分是關(guān)于字段分析,在理解分析器、分詞和過濾器中描述。

實(shí)現(xiàn)類負(fù)責(zé)確保字段被正確處理。在 schema.xml 類名中,字符串 solr 是 org.apache.solr.schema 或者 org.apache.solr.analysis 的簡寫形式。所以,solr.TextField 是真的 org.apache.solr.schema.TextField。

字段類型屬性

字段類型 class 決定了字段類型的大部分行為,但也可以定義可選的屬性。例如,date 字段類型的以下定義就定義了兩個(gè)屬性,sortMissingLast 和 omitNorms。

<fieldType name="date" class="solr.DatePointField"
           sortMissingLast="true" omitNorms="true"/>

可以為給定字段類型指定的屬性分為三個(gè)主要類別:

  • 特定于字段類型的類的屬性。
  • 常規(guī)屬性 Solr 支持任何字段類型。
  • 字段默認(rèn)屬性可以在字段類型上指定,這些字段將由使用此類型而不是默認(rèn)行為的字段繼承。

字段的一般屬性

這些是字段的一般屬性:

name

fieldType 的名稱。該值用于字段定義中的“類型”屬性中。強(qiáng)烈建議名稱僅包含字母數(shù)字或下劃線字符,不能以數(shù)字開頭。目前這不是嚴(yán)格執(zhí)行的。

class

用于存儲(chǔ)和索引此類型數(shù)據(jù)的類名。請注意,您可以用 “solr” 作為前綴包含的類名稱。Solr 會(huì)自動(dòng)找出哪些軟件包可以搜索這個(gè)類,這樣solr.TextField就可以工作了。

如果您使用的是第三方類,則可能需要具有完全限定的類名稱。solr.TextField是的完全限定等效項(xiàng)是org.apache.solr.schema.TextField。

positionIncrementGap

對于多值字段,指定多個(gè)值之間的距離,這可以防止虛假詞組匹配。

autoGeneratePhraseQueries

對于文本字段。如果為true,Solr 將自動(dòng)生成相鄰詞語的短語查詢。如果為false,則術(shù)語必須用雙引號括起來以作為短語處理。

enableGraphQueries

對于文本字段,查詢時(shí)使用sow=false(這是sow參數(shù)的默認(rèn)值)。對具有查詢分析器的字段類型使用 true (默認(rèn)值),包括具有圖形感知的篩選器,例如同義詞圖形過濾器和字符分隔符圖形過濾器。

對于既有查詢分析器使用的字段類型,使用 false 包括在缺少某些標(biāo)記 (例如,Shingle Filter) 時(shí)可以匹配文檔的篩選器。

docValuesFormat

定義用于此類型的字段的自定義 DocValuesFormat。這要求具有架構(gòu)感知的編解碼器(例如,SchemaCodecFactory 已在 solrconfig.xml 中配置)。

postingsFormat

定義用于此類型的字段的自定義 PostingsFormat。這要求具有架構(gòu)感知的編解碼器(例如,SchemaCodecFactory 已在 solrconfig.xml 中配置)。

Tip:只有默認(rèn)編解碼器支持 Lucene 索引反向兼容。如果您選擇在 schema.xml 中自定義 postingsFormat 或 docValuesFormat,則升級到未來版本的 Solr 可能會(huì)要求您切換回默認(rèn)編解碼器,并在升級之前優(yōu)化索引以將其重寫為默認(rèn)編解碼器,或升級后從頭開始重新構(gòu)建整個(gè)索引。

字段默認(rèn)屬性

這些屬性可以在字段類型中指定,也可以在單個(gè)字段中指定,以覆蓋字段類型提供的值。

每個(gè)屬性的默認(rèn)值取決于底層的 FieldType 類,這又可能取決于的  <schema/> 的 version 屬性。下面的表格包含了 FieldTypeSolr 提供的大多數(shù)實(shí)現(xiàn)的默認(rèn)值,假設(shè) schema.xml 聲明 version="1.6"。

屬性 描述 隱含默認(rèn)值

索引(indexed

如果為 true,則可以在查詢中使用該字段的值來檢索匹配的文檔。

true 或者 false

true

存儲(chǔ)(stored)

如果為 true,則字段的實(shí)際值可以通過查詢來檢索。

true 或者 false

true

docValues

如果為 true,則該字段的值將被放入一個(gè)面向列的 DocValues 結(jié)構(gòu)中。

true 或者 false

false

sortMissingFirst 

sortMissingLast

排序字段不存在時(shí)控制文檔的位置。

true 或者 false

false

多值(multiValued

如果為 true,則表示單個(gè)文檔可能包含此字段類型的多個(gè)值。

true 或者 false

false

omitNorms

如果為 true,則省略與該字段關(guān)聯(lián)的規(guī)范(這將禁用該字段的長度規(guī)范化,并保存一些內(nèi)存)。對于所有基元 (non-analyzed) 字段類型(如 int、float、data、bool 和 string)的默認(rèn)值均為true。只有全文字段或字段需要規(guī)范。

true 或者 false

*

omitTermFreqAndPositions

如果為 true,則省略該字段過帳的術(shù)語頻率、位置和有效載荷。這可以提高不需要這些信息的字段的性能。這也減少了索引所需的存儲(chǔ)空間。依賴于使用此選項(xiàng)在字段上發(fā)布的位置的查詢將悄然無法找到文檔。對于不是文本字段的所有字段類型,此屬性默認(rèn)為 true。

true 或者 false

*

omitPositions

類似于 omitTermFreqAndPositions 但保留了詞頻信息。

true 或者 false

*

termVectors termPositions termOffsets termPayloads

這些選項(xiàng)指示 Solr 維護(hù)每個(gè)文檔的全部向量矢量,可選地包括這些向量中每個(gè)詞條出現(xiàn)的位置,偏移和有效載荷信息。這些可以用來加速突出顯示和其他輔助功能,但在索引大小方面會(huì)帶來相當(dāng)大的成本。對于 Solr 的典型用途,它們不是必需的。

true 或者 false

false

必須的(required

指示 Solr 拒絕添加沒有此字段值的文檔的任何嘗試。此屬性默認(rèn)為 false。

true 或者 false

false

useDocValuesAsStored

如果該字段啟用了 docValues,將其設(shè)置為 true 將允許 stored=false 在 fl 參數(shù)中匹配“*”時(shí)將該字段作為存儲(chǔ)字段返回(即使有)。

true 或者 false

true

大(large

如果實(shí)際值<512KB,大字段總是被延遲加載,并且只占用文檔高速緩存中的空間。這個(gè)選項(xiàng)需要 stored="true" 和multiValued="false"。它的目的是為了可能有非常大的值,以便他們不被緩存在內(nèi)存中的字段。

true 或者 false

false

字段類型相似性

字段類型可以選擇指定一個(gè) <similarity/>,在對引用此類型的字段進(jìn)行評分的文檔時(shí)將使用它,只要集合的 "全局" 相似性允許這樣做。

默認(rèn)情況下,任何沒有定義相似性的字段類型都會(huì)使用 BM25Similarity。有關(guān)更多詳細(xì)信息以及配置全局和每類相似性的示例,請參閱其他架構(gòu)元素。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號