现有的SOLR集合未获取Zookeeper架构更改

时间:2015-02-16 02:56:31

标签: solr schema config apache-zookeeper solrcloud

我有一个在三个独立节点上运行的本地solr云集群:33.33.3[3-5]:8080 该群集由位于33.33.3[0-2]:2181

的本地3节点zookeeper集合管理

我正在尝试进行架构修改 - 但是,我无法让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.xmltest_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

3 个答案:

答案 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'可能包含数据。使用您删除的字段。

尝试清除您的测试集。