我想使用schema.xml而不是托管架构,因此我将solrconfig.xml中的以下内容更改为以下
<schemaFactory class="ManagedIndexSchemaFactory">
<bool name="mutable">true</bool>
<str name="managedSchemaResourceName">managed-schema</str>
</schemaFactory>
到
<schemaFactory class="ClassicIndexSchemaFactory"/>
但是当我尝试使用post命令索引平面文件时,indexschema不是可变错误。
答案 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:如果输入文档包含一个字段,该处理器将动态地向字段添加字段 或多个与模式中的任何字段或动态字段不匹配的字段。
简而言之,上述流程工厂用于托管架构。 当一个人不想使用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>