solr4.6關於schema.xml版本號的問題
前天在伺服器上搭建一主一從的solr4.6的伺服器,建core的時候,拋棄了以前從solr4.6下載包裡面的配置檔案。而是上這個資料夾拿配置檔案:F:\solr\solr-4.6.0\example\multicore\core0\conf。這個資料夾給的配置檔案是最簡單的!只需一個schema.xml和solrconfig.xml就可以迅速搭建一個core出來。
搭建好之後,基本的CRUD操作都可以。但是搜尋卻只能全字匹配或者只能單個字元匹配出結果。這是絕對不能容忍的。定位問題接近了一天,找有經驗的同事給排查也沒排查出來問題。最後我自己一點一點比對multicore資料夾下的配置檔案跟F:\solr\solr-4.6.0\example\solr\collection1這個資料夾下的配置檔案的配置區別。
當我把schema.xml的version屬性從1.1升到跟collection1下的相同檔案的1.5一致之後。重啟伺服器,問題解決了!
我只想想說,提供solr4.6包的工程師坑爹。schema.xml的version屬性對搜尋的效果影響重大,4.6下的multicore提供的版本號卻是古老的1.1.
查了下schema.xml的官方文件:http://wiki.apache.org/solr/SchemaXml
<schema name="example" version="1.5"> 49 <!-- attribute "name" is the name of this schema and is only used for display purposes. 50 version="x.y" is Solr's version number for the schema syntax and 51 semantics. It should not normally be changed by applications. 52 53 1.0: multiValued attribute did not exist, all fields are multiValued 54 by nature 55 1.1: multiValued attribute introduced, false by default 56 1.2: omitTermFreqAndPositions attribute introduced, true by default 57 except for text fields. 58 1.3: removed optional field compress feature 59 1.4: autoGeneratePhraseQueries attribute introduced to drive QueryParser 60 behavior when a single string produces multiple tokens. Defaults 61 to off for version >= 1.4 62 1.5: omitNorms defaults to true for primitive field types 63 (int, float, boolean, string...) 64 -->
翻譯一下:
1.0:多值屬性不存在,所有的域本質上是多值屬性
1.1:多值屬性被引進,預設為false
1.2:omitTermFreqAndPositions屬性被引進,預設為true,文字域除外
1.3:刪除可選的域壓縮特性
1.4:當單個字串產生多個詞的時候,autoGeneratePhraseQueries 屬性被引進以驅動查詢分析器行為。版本大於等於1.4預設被關閉
1.5:對於原子型別,omitNorms屬性預設為true
從官方文件上可以看出,版本號不一樣,shema.xml被解析出來的效果也是不一樣的。