スキーマ要素

Solr は、理解することが期待されるフィールドタイプとフィールドに関する詳細をスキーマファイルに保存します。

Solr のスキーマファイル

Solr のスキーマファイルの名前と場所は、Solr を最初にどのように設定したか、または後で変更したかによって異なる場合があります。

  • managed-schema.xml は、スキーマ API または スキーマレスモード 機能を介して実行時にスキーマの変更を行うために Solr がデフォルトで使用するスキーマファイルの名前です。

    必要に応じて、管理対象スキーマ機能が別のファイル名を使用するように 明示的に設定 できますが、ファイルの内容は引き続き Solr によって自動的に更新されます。

  • schema.xml は、ClassicIndexSchemaFactory を使用するユーザーが手動で編集できるスキーマファイルの従来の名前です。

  • SolrCloud を使用している場合、ローカルファイルシステムでこれらの名前のファイルが見つからない可能性があります。スキーマは、スキーマ API(有効な場合)または Solr 管理 UI の クラウド画面 を介してのみ表示できます。

インストールで使用されているファイルの名前がどちらであっても、ファイルの構造は変更されません。ただし、ファイルとの対話方法は変わります。管理対象スキーマを使用している場合は、スキーマ API のみを使用してファイルと対話し、手動で編集しないことが想定されています。管理対象スキーマを使用しない場合、ファイルを手動で編集することしかできず、スキーマ API は変更をサポートしません。

スキーマ API をまだ使用しておらず、SolrCloud を使用している場合は、upconfig および downconfig コマンドを使用して ZooKeeper を介してスキーマファイルと対話して、ローカルコピーを作成し、変更をアップロードする必要があります。これを行うためのオプションについては、Solr コントロールスクリプトのリファレンス および ZooKeeper ファイル管理 で説明しています。

スキーマファイルの構造

この例は実際の XML ではありませんが、スキーマファイルを構成する主要な要素を示しています。

<schema>
  <types>
    <fieldType>
  <fields>
    <field>
  <copyField>
  <dynamicField>
  <similarity>
  <uniqueKey>
</schema>

最も一般的に定義される要素は typesfields で、フィールドタイプと実際のフィールドが設定されます。フィールドタイプの定義とプロパティ、および フィールド のセクションでは、スキーマに合わせてこれらを構成する方法について説明します。

これらは、コピーフィールド で説明されている copyFields と、動的フィールド で説明されている dynamicFields によって補完されます。

以下の ユニークキー で説明されている uniqueKey は、常に定義する必要があります。

デフォルトの similarity が使用されますが、以下の 類似性 セクションで説明されているように変更できます。

タイプとフィールドはオプションのタグです

types セクションと fields セクションはオプションです。つまり、トップレベルで fielddynamicFieldcopyFieldfieldType の定義を自由に組み合わせることができます。これにより、スキーマ内の関連要素(フィールドタイプ定義でグループ化されたフィールドなど)をより論理的にグループ化できます。

ユニークキー

uniqueKey要素は、ドキュメントの一意の識別子となるフィールドを指定します。 uniqueKeyは必須ではありませんが、アプリケーションの設計上、ほとんどの場合必要になります。たとえば、インデックス内のドキュメントを更新する場合は、uniqueKeyを使用する必要があります。

ユニークキーフィールドは、名前を指定することで定義できます。

<uniqueKey>id</uniqueKey>

スキーマのデフォルト値とcopyFieldsは、uniqueKeyフィールドの設定に使用できません。 uniqueKeyfieldTypeは、解析対象外で、*PointFieldタイプのいずれでもあってはなりません。 uniqueKeyの値を自動的に生成するには、UUIDUpdateProcessorFactoryを使用できます。

さらに、uniqueKeyフィールドが使用されているが、複数値(またはfieldtypeから複数値を継承している)場合、操作は失敗します。ただし、フィールドが適切に使用されている限り、uniqueKeyは引き続き機能します。

類似度

類似度は、検索においてドキュメントのスコア付けに使用されるLuceneクラスです。

各コレクションには、1つの「グローバル」類似度があります。デフォルトでは、Solrは暗黙的なSchemaSimilarityFactoryを使用します。これにより、個々のフィールドタイプに「タイプごと」の特定の類似度を設定でき、明示的な類似度が設定されていないフィールドタイプには暗黙的にBM25Similarityが使用されます。

このデフォルトの動作は、スキーマ内で、単一のフィールドタイプの外部に、トップレベルの<similarity/>要素を宣言することでオーバーライドできます。この類似度宣言は、引数のないコンストラクタを持つクラスの名前を直接参照できます(例:BM25Similarity

<similarity class="org.apache.lucene.search.similarities.BM25Similarity"/>

または、SimilarityFactory実装を参照することでオーバーライドできます。

<similarity class="solr.BM25SimilarityFactory"/>

類似度ファクトリを使用する場合、オプションの初期化パラメータを指定できます。

<similarity class="solr.DFRSimilarityFactory">
  <str name="basicModel">P</str>
  <str name="afterEffect">L</str>
  <str name="normalization">H2</str>
  <float name="c">7</float>
</similarity>

ほとんどの場合、このようにグローバルレベルの類似度を指定すると、スキーマにフィールドタイプ固有の<similarity/>宣言も含まれている場合、エラーが発生します。重要な例外の1つは、SchemaSimilarityFactoryを明示的に宣言し、明示的な類似度を宣言していないすべてのフィールドタイプのデフォルトの動作を、特定の類似度で設定されているフィールドタイプの名前(defaultSimFromFieldTypeで指定)を使用して指定できることです。

<similarity class="solr.SchemaSimilarityFactory">
  <str name="defaultSimFromFieldType">text_dfr</str>
</similarity>

<fieldType name="text_dfr" class="solr.TextField">
  <analyzer ... />
  <similarity class="solr.DFRSimilarityFactory">
    <str name="basicModel">I(F)</str>
    <str name="afterEffect">B</str>
    <str name="normalization">H3</str>
    <float name="mu">900</float>
  </similarity>
</fieldType>

<fieldType name="text_ib" class="solr.TextField">
  <analyzer ... />
  <similarity class="solr.IBSimilarityFactory">
    <str name="distribution">SPL</str>
    <str name="lambda">DF</str>
    <str name="normalization">H2</str>
  </similarity>
</fieldType>

<fieldType name="text_other" class="solr.TextField">
  <analyzer ... />
</fieldType>

上記の例では、text_ibタイプのフィールドにはIBSimilarityFactory(情報ベースモデルを使用)が使用され、text_dfrタイプのフィールド、および<similarity/>を明示的に指定していないタイプを使用するフィールドには、DFRSimilarityFactory(ランダムからの乖離)が使用されます。

SchemaSimilarityFactorydefaultSimFromFieldTypeを設定せずに明示的に宣言されている場合、BM25Similarityが暗黙的にデフォルトとして使用されます。

このページで説明されているさまざまなファクトリに加えて、SweetSpotSimilarityFactoryClassicSimilarityFactoryなど、使用できる他の類似度実装がいくつかあります。詳細は、類似度ファクトリのSolr Javadocを参照してください。