Solr错误此Indexschema不可变

时间:2015-07-30 09:27:11

标签: solr solrj

我想使用schema.xml而不是托管架构,因此我将solrconfig.xml中的以下内容更改为以下

<schemaFactory class="ManagedIndexSchemaFactory">
    <bool name="mutable">true</bool>
    <str name="managedSchemaResourceName">managed-schema</str>
  </schemaFactory>

<schemaFactory class="ClassicIndexSchemaFactory"/> 

但是当我尝试使用post命令索引平面文件时,indexschema不是可变错误。

6 个答案:

答案 0 :(得分:66)

solrconfig.xml

中的AddSchemaFieldsUpdateProcessorFactory配置中删除updateRequestProcessorChain部分

solrconfig.xml中的schemaFactory选项。 这可以控制是否应该将Schema定义为&#34;托管索引模式&#34 ;:只能通过Schema API进行模式修改。 默认情况下,如果未指定schemaFactory,则默认行为是使用"ClassicIndexSchemaFactory"

ClassicIndexSchemaFactory需要使用schema.xml文件, 可以手动编辑,仅在加载集合时加载。此设置不允许修改架构的Schema API方法。

当指定ManagedIndexSchemaFactory时,Solr将从managedSchemaResourceName中命名的资源加载模式,而不是 来自schema.xml。

AddSchemaFieldsUpdateProcessorFactory:如果输入文档包含一个字段,该处理器将动态地向字段添加字段 或多个与模式中的任何字段或动态字段不匹配的字段。

在这里阅读更多内容 https://lucene.apache.org/solr/4_6_0/solr-core/org/apache/solr/update/processor/AddSchemaFieldsUpdateProcessorFactory.html

简而言之,上述流程工厂用于托管架构。 当一个人不想使用ManagedIndexSchemaFactory时,应该从updateRequestProcessorChain中删除它。

有关它的更多详细信息,您可以查看solr代码或阅读AddSchemaFieldsUpdateProcessorFactory.java的源代码 调试方法processAdd(AddUpdateCommand cm),将对此有所帮助。

答案 1 :(得分:7)

至少在Solr 7.2中,您可能只需在 solrconfig.xml 中的updateRequestProcessorChain定义中将 update.autoCreateFields 切换为 false 作为注释表示。

<!-- The update.autoCreateFields property can be turned to false to disable schemaless mode -->
<updateRequestProcessorChain name="add-unknown-fields-to-the-schema" default="${update.autoCreateFields:false}"
                             processor="uuid,remove-blank,field-name-mutating,parse-boolean,parse-long,parse-double,parse-date,add-schema-fields">
    <processor class="solr.LogUpdateProcessorFactory"/>
    <processor class="solr.DistributedUpdateProcessorFactory"/>
    <processor class="solr.RunUpdateProcessorFactory"/>
</updateRequestProcessorChain>

这是有用的,现在我只收到错误消息,如

  

来自http://localhost:8983/solr的服务器出错:错误:[doc = urn:nbn:cz:tst01-000001]未知字段'title'

因为我正在调整 schema.xml 中的静态非托管架构。

答案 2 :(得分:1)

在solrconfig.xml中将autoCreateFields更新为false。

${update.autoCreateFields:false}

答案 3 :(得分:0)

我意识到这篇文章已经过时但我今天在导入json文件时遇到了同样的行为。问题是.json没有正确形成。它缺少文件顶部和底部的[](方括号)和&#39;,&#39; (逗号)对象之间。我使用http://jslint.com/验证了该文件。一旦我做出这些更改,错误就解决了。

注意:这些是导致我的文件无法正确形成的问题。我建议您通过某种类型的验证器运行您的数据,以排除您的文件可能存在的任何问题。

我希望这会有所帮助。

答案 4 :(得分:0)

执行此操作而不是编辑solrconfig.xml文件的另一种方法是将update.autoCreateFields=false值添加到core.properties文件中。

答案 5 :(得分:0)

对于SOLR 7.7.2

从updateRequestProcessorChain中删除“ add-schema-field”。

  <updateRequestProcessorChain name="add-unknown-fields-to-the-schema" default="${update.autoCreateFields:true}"
                               processor="uuid,remove-blank,field-name-mutating,parse-boolean,parse-long,parse-double,parse-date">
    <processor class="solr.LogUpdateProcessorFactory"/>
    <processor class="solr.DistributedUpdateProcessorFactory"/>
    <processor class="solr.RunUpdateProcessorFactory"/>
  </updateRequestProcessorChain>