剛學Solr(版本6.7.0),新建一個core時,提示要求schema.xml文件,我找了半天也沒在源碼包中找到名為schema.xml的文件。這個版本其實用的是managed-schema文件,沒學過以前的版本,所以不知道是從哪個版本開始不使用schema.xml的,其實內容都一樣,搞不懂為啥要換個名字,而且內容格式是xml,但是文件名卻沒有.xml的后輟。個人感覺是吃飽了撐的。
為了學習方便,我是在windows下做的,以下{Solr.home}是指解壓后的文件目錄。在{Solr.home}\bin下運行 solr -e techproducts, 這樣我們就能在{Solr.home}\example\techproducts\solr\techproducts\conf 下找到managed-schema文件,文件有很詳細的注釋,下面的文件就是以那個文件為基礎進行的一些翻譯。
邊學邊寫,關於Solr的學習筆記中,有很多內容來自《Solr in action》和apache給出的guide,加上了一些自己的理解,有可能有表達錯誤的地方,以后學深入,再回頭來改。
managed-schema中主要有以下幾種元素:
1. <field>
定義Solr索引的document里的字段,這個一般是根據具體的搜索應用來定義需要有什么字段。有三個特殊一點的字段,分別是:"_version_", "_root_" 和 "id",詳見最后面的sample文件。
屬性 | 默認值 | 說明 |
name | 必須,不能取名score,前后輟為下划線的名字(如:_VERSION_)為保留名字 | |
type | 必須。值為定義的<fieldType> | |
indexed | true | 是否進行索引。 true的時候進行索引。 |
stored | true | 是否存儲。如果此字段的值需要顯示在搜索結果中,則需要進行存儲。 |
docValues | false | 是否需要存儲docValues。docValues用於提升sorting, faceting, grouping, function queries 等性能,現在僅支持StrField, UUIDFiel和所有的Trie*Fields和 *PointFields、日期字段和枚舉字段, 此值為true的字段要求此字段 multiValued=false, 並且 (required=true或設置了default的值). |
multiValued | false | 是否有多個值。 |
omitNorms | 見下面的說明 | |
termVectors | false | 設置為true,使More Like This特性生效,會極大的增加索引文件的大小。 |
termPositions | false | 通常用於提高高亮搜索結果這一功能的性能。設置為true,會增加索引文件的大小。 |
termOffsets | false | 通常用於提高高亮搜索結果這一功能的性能。設置為true,會增加索引文件的大小。 |
termPayloads | false | 通常用於提高高亮搜索結果這一功能的性能。設置為true,會增加索引文件的大小。 |
required | false | 如果設置為true,則索引時,如果此字段值為null,則會報錯。 |
default | 此字段的默認值。通常用於記錄索引生成的當前時間 | |
sortMissingFirst sortMissingLast |
false | 需要對搜索結果根據某個字段排序時,如果某條記錄的此字段值為空,則該記錄是排在搜索結果的最前/最后 |
omitTermFreqAndPositions |
對所有不是文本類型的字段,默認為TRUE | |
omitPositions |
與omitTermFreqAndPositions相似,只是僅忽略位置信息 | |
useDocValuesAsStored |
當docValues=true時,設置此值為TRUE,則如果返回的字段列表使用了通配符,即使此字段設置了stored=false, 此字段還是會出現在返回的結果里, |
|
large |
false | 設置為TRUE時,需要設置stored=true和multiValued=false, 表示此字段是大字段,會被懶加載。 通常用於此字段的內容可能比較大,不需要載入內存 |
對一些屬性的詳細點的說明:
omitNorms:
norm是基於document length norm,document boost和field boost計算出的浮點(float)值。這里的boost可以理解為權重。document length norm用於為較小的document增加權重(權重較大的話,計算搜索結果的score值會更高一點)。也就是說如果有一個比較小的document和一個比較長的document都符合搜索條件,Lucene會認為那個較小的document相對於較長的document更新符合搜索條件。omitNorms是指忽略norm,所以設為false時,較小的document和較長的document有相同的權重。因此如果我們需要為某個字段在索引時進行加權(boost),則應該設置為false。當字段類型為基本類型(比如:int, float,date,bool. string)時此默認值是true。
termVectors, termPositions, termOffsets 和 termPayloads :
此四個屬性通常用於 hl.useFastVectorHighlighter為true時的情況,會較大地增加索引大小
omitTermFreqAndPositions:
如果為TRUE,索引時將忽略頻率、位置、負載等信息,這有助於提升不需要這些信息的字段的性能,也會減少索引大小。但是查詢如果依賴於字段的位置信息,則會導致查詢不到相關document。
上一篇: