web-dev-qa-db-ja.com

SolrエラーこのIndexschemaは変更できません

管理されたスキーマではなくschema.xmlを使用したいので、solrconfig.xmlの以下を以下に変更しました

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

<schemaFactory class="ClassicIndexSchemaFactory"/> 

しかし、postコマンドを使用してフラットファイルにインデックスを付けようとすると、indexschemaは変更可能なエラーにはなりません。

29
Ajay K

solrconfig.xmlAddSchemaFieldsUpdateProcessorFactory構成からupdateRequestProcessorChainセクションを削除します

Solrconfig.xmlのschemaFactoryオプション。これは、スキーマを「マネージドインデックススキーマ」として定義する必要があるかどうかを制御します。スキーマの変更は、スキーマAPIを介してのみ可能です。デフォルトでは、schemaFactoryが指定されていない場合、デフォルトの動作は_"ClassicIndexSchemaFactory"_を使用することです。

ClassicIndexSchemaFactoryでは、schema.xmlファイルを使用する必要があります。このファイルは手動で編集でき、コレクションが読み込まれるときにのみ読み込まれます。この設定は、スキーマを変更するスキーマAPIメソッドを許可しません。

代わりにManagedIndexSchemaFactoryが指定されている場合、Solrはschema.xmlではなく、managedSchemaResourceNameで指定されたリソースからスキーマをロードします。

AddSchemaFieldsUpdateProcessorFactory:スキーマのフィールドまたは動的フィールドと一致しない1つ以上のフィールドが入力ドキュメントに含まれている場合、このプロセッサはフィールドをスキーマに動的に追加します。

同じことをもっと読む 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)を使用すると、同じことを行うのに役立ちます。

66

少なくともSolr 7.2では、コメントが示すようにsolrconfig.xmlのupdateRequestProcessorChain定義でpdate.autoCreateFieldsfalseに切り替えるだけで済みます。

<!-- 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で静的なアンマネージスキーマを調整しているため。

7
rzehan

Solrconfig.xmlでautoCreateFieldsをfalseに更新します。

${update.autoCreateFields:false}

1
Hemant Thorat

solrconfig.xmlファイルを編集する代わりにこれを行う別の方法は、update.autoCreateFields=false値をcore.propertiesファイルに追加することです。

1
hooknc

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>
0
ajaya

この投稿が古いことに気づきましたが、jsonファイルをインポートするときに、今日同じ動作に遭遇しました。問題は、.jsonが適切に形成されていないことでした。ファイルの上部と下部の[](角括弧)とオブジェクト間の「、」(コンマ)が欠落していました。 http://jslint.com/ を使用してファイルを検証しました。これらの変更を行うと、エラーは解決しました。

注:これらは私のファイルが適切に形成されないようにする問題でした。私はあなたがあなたのファイルが持っているかもしれないどんな問題も除外するためにあなたがあなたのデータをあるタイプのバリデーターを通して実行することを勧めます。

これがお役に立てば幸いです。

0
r2coder