スキーマファクトリーの設定

Solr は、管理スキーマと手動でメンテナンスする schema.xml ファイルの 2 つのスタイルのスキーマをサポートしています。管理スキーマを使用すると、スキーマ APIスキーマレスモード などの機能を利用できます。schema.xml を使用する場合、Solr のスキーマを変更する唯一の方法は、手動でファイルを編集することです。

solrconfig.xml の <schemaFactory>

solrconfig.xml<schemaFactory> は、システムが管理スキーマと schema.xml のどちらを使用するかを定義します。

<config>
  <schemaFactory>
    ...
  </schemaFactory>
</config>

スキーマ API の「読み取り」機能はすべてのスキーマタイプでサポートされていますが、スキーマの変更をプログラムで実行するためのサポートは、使用中の <schemaFactory/> に依存します。

スキーマファクトリー

ManagedIndexSchemaFactory

solrconfig.xml ファイルで <schemaFactory/> が明示的に宣言されていない場合、Solr は暗黙的に ManagedIndexSchemaFactory を使用します。これはデフォルトで "mutable" (編集可能) であり、スキーマ情報を managed-schema.xml ファイルに保持します。

スキーマ API を使用してスキーマを変更するには、管理スキーマを使用する必要があります。ただし、管理スキーマを使用しても、Solr をスキーマレスモード (または「スキーマ推測」モード) で使用しているという意味ではありません。

スキーマレスモードでは、まだ有効になっていない場合は管理スキーマを有効にする必要がありますが、完全なスキーマ推測には、スキーマレスモードセクションで説明されているように追加の設定が必要です。

以下は、Solr のデフォルトを反映した schemaFactory の例です。

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

デフォルトは、ManagedIndexSchemaFactory を明示的に設定し、以下のオプションのいずれかを変更することでオーバーライドできます。

mutable

オプション

デフォルト: true

スキーマデータへの変更が可能かどうかを制御します。スキーマ API で編集を許可するには、これを true に設定する必要があります。

上記のデフォルト設定では、スキーマ API を使用してスキーマを自由に変更し、後で mutable の値を false に変更してスキーマを「ロック」し、今後の変更を防ぐことができます。

managedSchemaResourceName

オプション

デフォルト: managed-schema.xml

スキーマファイルの名前。名前はschema.xml以外であれば何でも構いません。schema.xmlという名前はClassicIndexSchemaFactory用に予約されているためです。

ClassicIndexSchemaFactory

マネージドスキーマを使用する代わりに、明示的にClassicIndexSchemaFactoryを設定することもできます。これにはschema.xmlファイルを使用する必要があり、実行時にスキーマをプログラムで変更することはできません。schema.xmlファイルは手動で編集する必要があり、コレクションがロードされたときにのみロードされます。

  <schemaFactory class="ClassicIndexSchemaFactory"/>

このオプションはパラメーターを取りません。

スキーマファクトリーの変更

schema.xmlからマネージドスキーマへの切り替え

ClassicIndexSchemaFactoryを使用している既存のSolrコレクションがあり、マネージドスキーマを使用するように変換したい場合は、solrconfig.xmlを変更してManagedIndexSchemaFactoryの使用を指定するだけで済みます。

Solrを再起動し、schema.xmlファイルが存在するが、managedSchemaResourceNameファイル(つまり「managed-schema.xml」)が存在しないことを検出すると、既存のschema.xmlファイルの名前がschema.xml.bakに変更され、内容がマネージドスキーマファイルに書き直されます。

結果のファイルを見ると、ページの先頭に次の記述があります。

<!-- Solr managed schema - automatically generated - DO NOT EDIT -->

これで、Schema APIを使用して変更を行い、schema.xml.bakを削除できるようになりました。

マネージドスキーマからschema.xmlへの切り替え

マネージドスキーマを有効にしてSolrを起動していて、手動でschema.xmlファイルを編集するように切り替えたい場合は、次の手順を実行する必要があります。

  1. managed-schema.xmlファイルの名前をschema.xmlに変更します。

  2. solrconfig.xmlを修正して、schemaFactoryクラスを置き換えます。

    1. ManagedIndexSchemaFactory定義が存在する場合は削除します。

    2. 上記のようにClassicIndexSchemaFactory定義を追加します。

  3. コアをリロードします。

SolrCloudを使用している場合は、ZooKeeperを介してファイルを変更する必要がある場合があります。bin/solrスクリプトは、ZooKeeperからファイルをダウンロードし、編集後にアップロードするための簡単な方法を提供します。詳細については、ZooKeeper操作のセクションを参照してください。

schema.xmlファイルを完全に制御するには、スキーマ推測を無効にすることもできます。これにより、インデックス作成中に不明なフィールドがスキーマに追加されるのを防ぎます。この機能を有効にするプロパティについては、スキーマレスモードのセクションで説明されています。