SOLR 中 Schema.xml 的filedType 的一些属性的理解 [转]备注起来
from matching across instances.?
?4. ?? omitNorms
The Solr schema file. This file should be named "schema.xml" and should be in the conf directory under the solr home (i.e. ./solr/conf/schema.xml by default) or located where the classloader for the Solr webapp can find it.
For more information, on how to customize this file, please see… wiki.apache.org/solr/SchemaXml
<schema name="solr" version="1.1">
資料型態, 你的資料可能要分很多不同型態做資料建置以便solr引擎做檢索, 就像一般資料庫一樣, 要對存入的資料做型態分類. 以下有string, boolean, integer, long, float, double 等等的資料型態, 就依你的須求做設定. 每一個fieldtype 都有幾個參數可設定, 其中name就是你給這個fieldtype的名子, 你可以隨你的方便取名. class是solr用的,就不可以亂取, 要針對你這個fieldtype的資料型態來告訴solr這個fieldtype裡的資料是什麼樣類型的資料,如 integer, text, string, long等等.
後面的sortMissingLast, omitNorms等設定你可以參考solr wiki schemalXml的介紹, 再依你的須求使用. 請參考下列範例.
<types>
<fieldtype name="string" sortMissingLast="true" omitNorms="true"/>
<fieldtype name="boolean" sortMissingLast="true" omitNorms="true"/>
<fieldtype name="integer" omitNorms="true"/>
<fieldtype name="long" omitNorms="true"/>
<fieldtype name="float" omitNorms="true"/>
<fieldtype name="double" omitNorms="true"/>
<fieldtype name="sint" sortMissingLast="true" omitNorms="true"/>
<fieldtype name="slong" sortMissingLast="true" omitNorms="true"/>
<fieldtype name="sfloat" sortMissingLast="true" omitNorms="true"/>
<fieldtype name="sdouble" sortMissingLast="true" omitNorms="true"/>
<fieldtype name="date" sortMissingLast="true" omitNorms="true"/>
如果是TextField的資料型態, 你可以用不同的Analyzer, Tokenizer, Filter對這個fieldtype的資料做處理. 像是中文切詞, 刪除前後空白, 或同義詞等等. 可依你的須求使用. 請參考下列範例.
<fieldtype name="text_ws" positionIncrementGap="100">
<analyzer>
<tokenizer positionIncrementGap="100">
<analyzer type="index">
<tokenizer ignoreCase="true" words="stopwords.txt"/>
<filter generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0"/>
<filter protected="protwords.txt"/>
<filter synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter ignoreCase="true" words="stopwords.txt"/>
<filter generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0"/>
<filter protected="protwords.txt"/>
<filter positionIncrementGap="100" >
<analyzer>
<tokenizer synonyms="synonyms.txt" ignoreCase="true" expand="false"/>
<filter ignoreCase="true" words="stopwords.txt"/>
<filter generateWordParts="0" generateNumberParts="0" catenateWords="1" catenateNumbers="1" catenateAll="0"/>
<filter protected="protwords.txt"/>
<filter type="string" indexed="true" stored="true"/>
上面這個欄位(field)是給你document裡的id欄用, 型態為string, 要index, 也要儲存在你的資料庫裡
<field name="default" type="text" indexed="true" stored="false" multiValued="true"/>
<field name="name" type="text" indexed="true" stored="false" multiValued="true"/>
dynamicField就是動態欄位, 要是你有太多欄位無法一一設定,你可以用dynamicField處理像下面這第一個dynamicField就是說, 所有欄位是以 _i做結尾的 (如 a_i, sss_i, id_i等等)都套用這個設定.
<dynamicField name="*_i" type="integer" indexed="true" stored="true"/>
<dynamicField name="*_t" type="text" indexed="true" stored="true"/>
<dynamicField name="*_f" type="float" indexed="true" stored="true"/>
<dynamicField name="*_b" type="boolean" indexed="true" stored="true"/>
<dynamicField name="*_d" type="date" indexed="true" stored="true"/>
<dynamicField name="*_s" type="string" indexed="true" stored="true"/>
<dynamicField name="*_ri" type="sint" indexed="true" stored="true"/>
<dynamicField name="*_rf" type="sfloat" indexed="true" stored="true"/>
<dynamicField name="*_facet" type="string" indexed="true" stored="true"/>
</fields>
uniqueKey就像一般database的primary key一樣, 也就是說整個資料庫裡的每一筆資料的id欄位不可以與另一筆資料的id欄位有相同值.
<uniqueKey>id</uniqueKey>
defaultSearchField就是你在做query搜尋時若不指定特定欄位做檢索時, Solr就會只查這個欄位.
<defaultSearchField>default</defaultSearchField>
copyField是用來複製你一個欄位裡的值到另一欄位用. 如你可以將name裡的東西copy到default裡, 這樣solr做檢索時也會檢索到name裡的東西.
<copyField source="name" dest="default"/>
這裡defaultOperator設為 "AND", 就是說當你輸入的查尋詞句有空白時 ex. "遠東 餐廳", Solr搜尋解析器會當做你的query指令為"遠東AND餐廳". 若是設為 "OR" 就會變成"遠東OR餐廳".
<solrQueryParser defaultOperator="AND"/>
</schema>