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

Existing SOLR collection not picking up Zookeeper schema change

我在三个独立的节点上有一个本地 solr 云集群 运行:33.33.3[3-5]:8080 该集群由本地 3 节点 zookeeper 集合管理,该集合位于: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 框,浏览到 /opt/src/solr/solr/conf/ 在 vim 中打开 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 获取更改。我可以从 zookeeper 下载文件,更改就在那里。我可以在 SOLR admin (cloud>tree>configs>schema.xml AND 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

我认为您错过了步骤 linkconfig,它将配置集链接到 collection。

所以在开始时,upconfig 之后,创建 collection 之前,您需要按以下方式进行 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 就足够了,然后像您一样重新加载 collection。只是在创建 collection.

之前缺少这一步

collectionAPI的完整参考,可以看这里: https://cwiki.apache.org/confluence/display/solr/Collections+API

可能您的 SOLR 'test_collection' 中有数据使用您删除的字段。

尝试清除您的测试集。

在过去几个月里花了很多时间在 SOLR 上,我终于弄明白了这一点。

让我们分解一下我遇到的问题。

我正在将配置上传到 zookeeper,在 solr 中创建一个集合,并将两者链接在一起。然后我会更改架构 - 再次上传它,重新加载 solr 核心 - 什么都不会发生!

从根本上说,这是用户错误和对一项主要功能的误解。

我在 SOLR 中使用了托管架构。这意味着我可以在较新版本的 SOLR 中利用架构 API。对于任何感兴趣的人 - 当您使用托管模式时 - SOLR 实际上会制作它编辑的模式的副本 - 这就是更改的地方。不是您的原始模式(仍暴露在 http://33.33.33.33:8080/solr/test_collection/schema/fields)。

如果您想查看最近的更改是否生效。查看 zookeeper 中配置文件夹中的 managed-schema 文件。

感谢大家的帮助。