Solr错误此Indexschema不可变

Aja*_*y K 29 solr solrj

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

<schemaFactory class="ManagedIndexSchemaFactory">
    <bool name="mutable">true</bool>
    <str name="managedSchemaResourceName">managed-schema</str>
  </schemaFactory>
Run Code Online (Sandbox Code Playgroud)

<schemaFactory class="ClassicIndexSchemaFactory"/> 
Run Code Online (Sandbox Code Playgroud)

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

Abh*_*tti 67

AddSchemaFieldsUpdateProcessorFactorysolrconfig.xml中updateRequestProcessorChain配置中删除该部分

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

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

当指定ManagedIndexSchemaFactory时,Solr将从名为in的资源加载模式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 Debug方法的源代码processAdd(AddUpdateCommand cm),将有更多相同的帮助.

  • 谢谢,很好的回答,这对我很有用.你能详细说明为什么需要这样做吗? (2认同)

rze*_*han 8

至少在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>
Run Code Online (Sandbox Code Playgroud)

这工作,现在我只得到漂亮的错误消息,如

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

因为我正在调整schema.xml中的静态非托管模式.