スキーマ要素
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>
最も一般的に定義される要素は types
と fields
で、フィールドタイプと実際のフィールドが設定されます。フィールドタイプの定義とプロパティ、および フィールド のセクションでは、スキーマに合わせてこれらを構成する方法について説明します。
以下の ユニークキー で説明されている uniqueKey
は、常に定義する必要があります。
デフォルトの similarity
が使用されますが、以下の 類似性 セクションで説明されているように変更できます。
タイプとフィールドはオプションのタグです
|
ユニークキー
uniqueKey
要素は、ドキュメントの一意の識別子となるフィールドを指定します。 uniqueKey
は必須ではありませんが、アプリケーションの設計上、ほとんどの場合必要になります。たとえば、インデックス内のドキュメントを更新する場合は、uniqueKey
を使用する必要があります。
ユニークキーフィールドは、名前を指定することで定義できます。
<uniqueKey>id</uniqueKey>
スキーマのデフォルト値とcopyFields
は、uniqueKey
フィールドの設定に使用できません。 uniqueKey
のfieldType
は、解析対象外で、*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
(ランダムからの乖離)が使用されます。
SchemaSimilarityFactory
がdefaultSimFromFieldType
を設定せずに明示的に宣言されている場合、BM25Similarity
が暗黙的にデフォルトとして使用されます。
このページで説明されているさまざまなファクトリに加えて、SweetSpotSimilarityFactory
、ClassicSimilarityFactory
など、使用できる他の類似度実装がいくつかあります。詳細は、類似度ファクトリのSolr Javadocを参照してください。