摘要:在之前的Solr版本中(Solr5之前),在創建core的時候,Solr會自動創建好schema.xml,但是在之后的版本中,新加入了動態更新schema功能,這個默認的schema.xml確找不到了,那么managed-schema與schema.xml是什么樣的關系,一起來探究一番。
尋找缺失的schema.xml
-
在Solr的配置文件里,有兩個文件很重要,一個是
solrconfig.xml,還有一個就是schema.xml。
Solr6創建完core以后,默認已經生成了solrconfig.xml,但是卻找不到schema.xml。 -
在管理頁面,可以看到,雖然Schema可以點擊,但是內容是空的,只可以添加Filed。

-
原來,在Solr5以后,這個schema文件已經不是默認生成好的了,它被取了一個名字
managed-schema,並且沒有后綴。乍一看,以為是打不開的文件,當然沒有什么能難倒程序員的,用Notepad++打開,發現了熟悉的文字,這不就是之前的schema.xml文件嗎?
This is 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.
- 文檔中還明確說明了,這個文檔應該根據實際情況放到合適的位置,並把文件命名為
schema.xml.這次我們就直接把文件名改成schema.xml就可以了,位置就是當前文件夾。
動態更新schema.xml
在之前的版本中,我們是可以在solr的管理頁面直接查看schema.xml文件的,但是不能對其做修改,如果手動更改schema.xml文件,需要重啟服務器才能生效。在現在的版本中,是可以直接編輯這個文件的,在Schema選項下,有AddField、Add Dynamic Field、Add Copy Field三個基礎功能。
如果你手動將managed-schema文件改為schema.xml,那么在重新啟動以后,solr會將schema.xml改名為schema.xml.bak,並再次生成一個managed-schema文件。
打開這個managed-schema文件,會發現這個文件不允許修改的。 
solr使用schema.xml還是managed-schema
solr6使用<schemaFactory/>來控制使用schema的方式,默認使用的是ManagedIndexSchemaFactory,但是在solrconfig.xml文件中,這個配置沒有顯示的指定出來,其實它相當於
<schemaFactory class="ManagedIndexSchemaFactory"> <bool name="mutable">true</bool> <str name="managedSchemaResourceName">managed-schema</str> </schemaFactory>
- mutable 是否改變Schema數據,設置為false可以防止他人更改Schema
- managedSchemaResourceName 可以指定Schema的名字,當然值不能是
schema.xml
如果你已經熟悉了之前的配置方式,可以使用ClassicIndexSchemaFactory,只需要在solrconfig.xml文件中添加這樣的配置<schemaFactory class="ClassicIndexSchemaFactory"/>即可,當然這就需要你必須配置一個schema.xml文件。
如果你在使用SolrCloud,上述的操作應該是在ZooKeeper中完成。
