検索インデックス・スキーマのカスタマイズ
テーブルと検索インデックスのデータ間の関係を定義する検索スキーマをカスタマイズします。
検索スキーマは、テーブルと検索インデックスのデータ間の関係を定義します。スキーマは、インデックスを作成するためにカラムを識別し、カラム名をApache Solr™型にマップします。
スキーマのデフォルト
DSE Searchは、CQLカラム型を対応するSolrフィールド型に自動的にマップし、フィールド型アナライザーとフィルタリング・クラスを定義し、DocValueを設定します。
ヒント: 必要に応じて、CQL-Solr型互換性マトリクスを使用して、スキーマを変更します。
テーブルとスキーマの定義
indexed="true"
に設定されているフィールドは、インデックスが作成され、セカンダリ・ファイルとしてLuceneに格納されるため、検索可能です。インデックスが作成されたフィールドは、コピー・フィールドを除き、Luceneではなくデータベースに格納されます。コピー・フィールドのデスティネーションはデータベースに格納されません。
フィールド値を小文字に設定し、docValues
で小文字として格納するには、カスタムのLowerCaseStrField
型を使用します。「検索インデックスでのLowerCaseStrFieldの使用」を参照してください。
サンプル・スキーマ
「CQLコレクションのクエリー」の以下の例では、単純なプライマリ・キーを使用しています。スキーマ・バージョン属性は、スキーマ構文とセマンティクスのSolrバージョン番号です。この例では、version="1.5"です。
<schema name="my_search_demo" version="1.5">
<types>
<fieldType class="solr.StrField" multiValued="true" name="StrCollectionField"/>
<fieldType name="string" class="solr.StrField"/>
<fieldType name="text" class="solr.TextField"/>
<fieldType class="solr.TextField" name="textcollection" multiValued="true">
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
</analyzer>
</fieldType>
</types>
<fields>
<field name="id" type="string" indexed="true"/>
<field name="quotes" type="textcollection" indexed="true"/>
<field name="name" type="text" indexed="true"/>
<field name="title" type="text" indexed="true"/>
</fields>
<defaultSearchField>quotes</defaultSearchField>
<uniqueKey>id</uniqueKey>
</schema>
DSE Searchは、id、quotes、name、titleの各フィールドのインデックスを作成します。
CQLプライマリ・キーとSolrユニーク・キーのマッピング
DSE Searchでは、単純なプライマリ・キーまたは複合プライマリ・キーを使用したCQLテーブルをサポートしています。
フィールドがデータベース内の複合プライマリ・キーまたは複数カラムのパーティション・キーの定義カラムの場合、ユニーク・キー値を丸かっこで囲みます。このようなテーブルのスキーマでは、単純なプライマリ・キーとは異なる構文を使用する必要があります。
- スキーマのCQLテーブルにフィールドとして現れる各複合プライマリ・キー・カラムを、他のカラムと同様にリストします。
- 丸かっこで囲まれているキー・カラムを使用してユニーク・キーを宣言します。
- CQLテーブルで順序が指定されるキーと同様に、uniqueKey要素内のキーの順序を指定します。
- 複合パーティション・キーを使用する場合は、uniqueKeyに余分な丸かっこを含めないでください。
パーティション・キー CQL構文 Solr uniqueKey構文 単純なCQLプライマリ・キー CREATE TABLE ( ... a type PRIMARY KEY, ...);
(
a
はパーティション・キーとプライマリ・キーの両方)<uniqueKey>a</uniqueKey>
注: 単一キーの場合、丸かっこは必要ありません。複合プライマリ・キー CREATE TABLE ( ...PRIMARY KEY ( a, b, c ) );
(
a
はパーティション・キー、a b c
はプライマリ・キー)<uniqueKey>(a, b, c)</uniqueKey>
複合パーティション・キー CREATE TABLE ( ...PRIMARY KEY ( ( a, b), c );
(
a b
はパーティション・キー、a b c
はプライマリ・キー)<uniqueKey>(a, b, c)</uniqueKey>