簡體   English   中英

Solr 錯誤此索引架構不可變

[英]Solr Error This Indexschema is not mutable

我想使用 schema.xml 而不是托管架構,所以我將 solrconfig.xml 中的以下內容更改為以下內容

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

<schemaFactory class="ClassicIndexSchemaFactory"/> 

但是當我嘗試使用 post 命令索引平面文件時,我得到了 indexschema is not mutable 錯誤。

solrconfig.xml 中updateRequestProcessorChain配置中刪除AddSchemaFieldsUpdateProcessorFactory部分

solrconfig.xml 中的 schemaFactory 選項。 這控制了 Schema 是否應該定義為“托管索引模式”:模式修改只能通過 Schema API 進行。 默認情況下,如果未指定 schemaFactory,則默認行為是使用"ClassicIndexSchemaFactory"

ClassicIndexSchemaFactory 需要使用 schema.xml 文件,該文件可以手動編輯並且僅在加載集合時才加載。 此設置不允許修改架構的架構 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) ,這將有助於更多。

隨着Solr 7.2的更新版本,您需要在solrconfig.xml中的updateRequestProcessorChain定義中將update.autoCreateFieldsfalse

<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">

至少在 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] 未知字段“標題”

因為我正在調整schema.xml 中的靜態非托管架構。

將 solrconfig.xml 中的autoCreateFields更新為 false。

${update.autoCreateFields:false}

執行此操作而不是編輯solrconfig.xml文件的另一種方法是將update.autoCreateFields=false值添加到core.properties文件中。

對於 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>

我意識到這篇文章很舊,但我今天在導入 json 文件時遇到了同樣的行為。 問題是 .json 格式不正確。 它缺少文件頂部和底部的 [](方括號)以及對象之間的“,”(逗號)。 我使用http://jslint.com/驗證了該文件。 一旦我進行了這些更改,錯誤就解決了。

注意:這些是使我的文件無法正確形成的問題。 我建議您通過某種類型的驗證器運行您的數據,以排除您的文件可能存在的任何問題。

我希望這有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM