schema.xml配置文件是用於定義index索引庫的結構,有點類似於數據表表的定義。
當我們打開schema.xml配置文件時,也許會被裏面密密麻麻的代碼所嚇倒,其實不必驚慌,裏面其實就兩個東西filed和fieldType。
1、field–類似於數據表的字段
<fields> <field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" omitNorms="true" default="df"/> .....//省略 <field name="_version_" type="long" indexed="true" stored="true"/><!--此字段爲最好不要刪除哦!非要刪除,請把solrconfig.xml中的updateLog註釋,但不建議這樣--> </fields>
屬性介紹: (1)、name:字段名稱 (2)、type:字段類型(此處type不是java類型,而是下面定義的fieldType) (3)、indexed:是否索引?true--solr會對這個字段進行索引,只有經過索引的字段才能被搜索、排序等;false--不索引 (4)、stored:是否存儲?true--存儲,當我們需要在頁面顯示此字段時,應設爲true,否則false。 (5)、required:是否必須?true--此字段爲必需,如果此字段的內容爲空,會報異常;false--不是必需 (6)、multiValued:此字段是否可以保存多個值? (7)、omitNorms:是否對此字段進行解析?有時候我們想通過某個字段的完全匹配來查詢信息,那麼設置 indexed="true"、omitNorms="true"。 (8)、default:設置默認值
2、fieldType–字段類型
<types>
<fieldType name="string" class="solr.StrField" sortMissingLast="true" />
.....//省略
<fieldType name="text_general" positionIncrementGap="100">
<analyzer type="index">
<tokenizer/>
<filter ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
<filter/>
</analyzer>
<analyzer type="query">
<tokenizer/>
<filter ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
<filter synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter/>
</analyzer>
</fieldType>
</types>
屬性說明: (1)、name:類型名稱,<field>中的type引用的就是這個name (2)、class:solr自定義的類型 (3)、<analyzer type="index">定義建立索引時使用的分詞器及過濾器 (4)、<analyzer type="query">定義搜索時所使用的分詞器及過濾器 (5)、 <tokenizer/>定義分詞器 (6)、<filter/>定義過濾器
3、uniqueKey
<uniqueKey>id</uniqueKey>
類似於數據表數據的id,solr索引庫中最好定義一個用於標示document唯一性的字段,此字段主要用於刪除document。
4、<copyField/>
<copyField source=”cat” dest=”text”/>
實際項目中爲了方便查詢,我們會把多個需要查詢的字段合併到一個字段裏,方便查詢。
舉例:
產品搜索,關鍵詞不應該只匹配產品標題,還應該匹配產品關鍵詞及產品簡介等,那麼在建立索引庫時,可以把標題、產品關鍵詞、簡介放到一個叫text的字段中,搜索時直接搜text字段。
<fields> <field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" /> <field name="title" type="text_general" indexed="true" stored="true"/> <field name="keywords" type="text_general" indexed="true" stored="true" omitNorms="true"/> <field name="description" type="string" indexed="true" stored="true" multiValued="true"/> </fields> <copyField source="title" dest="text"/> <copyField source="keywords" dest="text"/> <copyField source="description" dest="text"/>
更多詳細的內容請親自研究schema.xml配置文件