我有一个在三个独立节点上运行的本地solr云集群:33.33.3[3-5]:8080
该群集由位于33.33.3[0-2]:2181
我正在尝试进行架构修改 - 但是,我无法让SOLR接收新的更改。这就是我正在做的事情
首先我将一个配置集上传到zookeeper:
/opt/src/solr/scripts/cloud-scripts/zkcli.sh -zkhost 33.33.33.30:2181,33.33.33.31:2181,33.33.33.32:2181 -cmd upconfig -confdir /opt/src/solr/solr/conf/ -confname test_conf
然后我在SOLR中创建一个集合:
http://33.33.33.33:8080/solr/admin/collections?action=CREATE&name=test_collection&numShards=1&replicationFactor=3
一切正常。由于zookeeper中只有一个配置,因此会在创建时自动映射到集合。很酷。
但现在我想修改test_collection
的架构。所以,我ssh到我的一个SOLR框中,浏览到vim中的/opt/src/solr/solr/conf/
打开schema.xml
,并删除一个字段。然后我再次上传配置(使用相同的名称,以便覆盖旧配置):
/opt/src/solr/scripts/cloud-scripts/zkcli.sh -zkhost 33.33.33.30:2181,33.33.33.31:2181,33.33.33.32:2181 -cmd upconfig -confdir /opt/src/solr/solr/conf/ -confname test_conf
现在我重新加载核心:
http://33.33.33.33:8080/solr/admin/collections?action=RELOAD&name=test_collection
动物园管理员接受了这些变化。我可以从zookeeper下载文件,并且有更改。我可以在SOLR管理员(cloud>tree>configs>schema.xml
和test_collection>files>schema.xml
)中浏览配置,并反映更改。但是,如果我点击这条路线:http://33.33.33.33:8080/solr/test_collection/schema/fields
该字段仍在那里。此外,如果我转到SOLR管理员中的test_collection>schema browser
,那么该字段仍会列在那里。
这里发生了什么?
编辑:
如果我查看SOLR管理员中的日志,我会看到以下必须相关的内容......
2/23/2015, 3:06:46 PM
WARN
OverseerCollectionProcessor
OverseerCollectionProcessor.processMessage : reloadcollection , {
2/23/2015, 3:06:46 PM
WARN
ManagedIndexSchemaFactory
The schema has been upgraded to managed, but the non-managed schema schema.xml is still loadable. PLEASE REMOVE THIS FILE.
2/23/2015, 3:06:46 PM
WARN
RequestHandlers
Multiple requestHandler registered to the same name: /update/json ignoring: org.apache.solr.handler.UpdateRequestHandler
2/23/2015, 3:06:46 PM
WARN
RequestHandlers
Multiple requestHandler registered to the same name: /update ignoring: org.apache.solr.handler.UpdateRequestHandler
2/23/2015, 3:06:46 PM
WARN
RequestHandlers
Multiple requestHandler registered to the same name: /replication ignoring: org.apache.solr.handler.ReplicationHandler
答案 0 :(得分:3)
在过去的几个月里,我花了这么多时间与SOLR合作后,我终于想到了这一点。
让我们分解我所看到的问题。
我正在将配置上传到zookeeper,在solr中创建一个集合,并将两者连接在一起。然后我会改变架构 - 再次上传它,重新加载solr核心 - 什么都不会发生!
这是其核心 - 用户错误和对一个主要功能的误解。
我在SOLR中使用托管架构。这意味着我可以在较新版本的SOLR中利用模式API。对于任何感兴趣的人 - 当您使用托管架构时 - SOLR实际上会复制您编辑的架构 - 而这正是更改的地方。不是原始模式(仍在http://33.33.33.33:8080/solr/test_collection/schema/fields公开)。
如果您希望查看最近的更改生效。看一下zookeeper中config文件夹中的managed-schema
文件。
感谢大家的帮助。
答案 1 :(得分:1)
我认为您错过了 linkconfig 步骤,该步骤将配置集链接到集合。
所以在开始时,在upconfig之后,在创建集合之前,你需要做如下的linkconfig:
/opt/src/solr/scripts/cloud-scripts/zkcli.sh -zkhost 33.33.33.30:2181,33.33.33.31:2181,33.33.33.32:2181 -cmd linkconfig -collection test_collection -confname test_conf
然后更新配置,你不必再次进行linkconfig,只需要进行upconfig,然后像你一样重新加载。在创建集合之前,开头就缺少了这一步。
有关集合API的完整参考,您可以在此处查看: https://cwiki.apache.org/confluence/display/solr/Collections+API
答案 2 :(得分:0)
您的SOLR' test_collection'可能包含数据。使用您删除的字段。
尝试清除您的测试集。