マップ・カラムのインデックス作成
CQLマップ・カラムのインデックスを動的に作成したり、キーのSolrフィールド型を手動で設定したりします。
DataStax Enterprise(DSE)Searchでは、Solr動的フィールドを使用してCQLマップ・カラムのインデックスを作成します。動的フィールドは、名前に対するワイルドカード一致を使用してフィールド定義を適用します。検索インデックス・スキーマでは、DSEによって動的フィールドの名前がアスタリスクを追加したCQLカラム名に設定されます。DSEはキーを使用してマップ・データを解析し、Solrはプレフィックスとしてカラム名が付いているキーにのみインデックスを作成します。プレフィックスとしてカラム名が付けられていないキーは無視されます。
blist_
マップ・カラム定義は次のようになります。<dynamicField indexed="true" multiValued="false" name="blist_*" type="StrField"/>
blist_
を含んでいるすべてのキーでインデックスが作成され、残りは無視されます。以下のデータが挿入される場合、blist_age
とblist_nation
にのみインデックスが作成されます。INSERT INTO cycling.birthday_list (cyclist_name, blist_) VALUES ('Allan DAVIS', { 'blist_age':'35', 'bday':'27/07/1980', 'blist_nation':'AUSTRALIA'});
CQLマップのキーと値のペアはすべて同じデータ型になります。上記の例のマップですべての値をテキスト(blist map<text,text>
)に設定します。DSE Searchはキー名をSolr動的フィールド名にマッピングすることでデータを読み込むため、各キーのフィールド型をカスタマイズすることができます。
始める前に
このセクションでは、すべてのレコード、blist_age、bday(生年月日)、blist_nationに同一の3つのマップ・キーがあるデータについて、インデックスをカスタマイズするプロセスについて説明します。ここでは、blist_ageとblist_nationにのみインデックスが作成されています。
- cyclingキースペースを作成します
- birthday_listテーブルとデータを追加します
手順
-
blist_
マップ・カラムを実行するインデックスを作成します。CREATE SEARCH INDEX ON cycling.birthday_list WITH COLUMNS blist_ {excluded:true};
-
アクティブなスキーマを表示します。
DESC ACTIVE SEARCH INDEX SCHEMA ON cycling.birthday_list ;
DSEでCQLtext
をSolrStrField
型に設定します。<?xml version="1.0" encoding="UTF-8" standalone="no"?> <schema name="autoSolrSchema" version="1.5"> <types> <fieldType class="org.apache.solr.schema.StrField" name="StrField"/> </types> <fields> <field indexed="true" multiValued="false" name="cyclist_name" type="StrField"/> </fields> <uniqueKey>cyclist_name</uniqueKey> </schema>
blist_age
を整数に設定するには、型の定義も必要になります。 -
blist_age
型を定義し、フィールド定義を構成します。ALTER SEARCH INDEX SCHEMA ON cycling.birthday_list ADD types.fieldType[@class='org.apache.solr.schema.TrieIntField', @name='TrieIntField']; ALTER SEARCH INDEX SCHEMA ON cycling.birthday_list ADD fields.field[@indexed='true', @multiValued='false', @name='blist_age', @type='TrieIntField'];
-
blist_nation
フィールドを文字列型として定義します。ここには、@type='StrField'
の対応する型定義が含まれています。ALTER SEARCH INDEX SCHEMA ON cycling.birthday_list ADD fields.field[@name='blist_nation', @indexed='true', @multiValued='false', @type='StrField'];
-
保留中のスキーマへの変更を表示し、構文が正しいことを確認します。
DESC PENDING SEARCH INDEX SCHEMA ON cycling.birthday_list ;
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <schema name="autoSolrSchema" version="1.5"> <types> <fieldType class="org.apache.solr.schema.StrField" name="StrField"/> <fieldType class="org.apache.solr.schema.TrieIntField" name="TrieIntField"/> </types> <fields> <field indexed="true" multiValued="false" name="cyclist_name" type="StrField"/> <field indexed="true" multiValued="false" name="blist_age" type="TrieIntField"/> <field indexed="true" multiValued="false" name="blist_nation" type="StrField"/> </fields> <uniqueKey>cyclist_name</uniqueKey> </schema>
-
インデックスの構成とスキーマを再読み込みし、変更をライブにプッシュします。
RELOAD SEARCH INDEX ON cycling.birthday_list;
-
フィールドが追加された場合は必ずインデックスをリビルドします。
REBUILD SEARCH INDEX ON cycling.birthday_list;
-
マップ・フィールドを使用してクエリーをフィルター処理します。
- 23歳までに制限します。
SELECT * FROM cycling.birthday_list WHERE solr_query = 'blist_age:23';
cyclist_name | blist_ | solr_query ------------------+----------------------------------------------------------------------+------------ Claudio HEINEN | {'bday': '27/07/1992', 'blist_age': '23', 'blist_nation': 'GERMANY'} | null Laurence BOURQUE | {'bday': '27/07/1992', 'blist_age': '23', 'nation': 'CANADA'} | null (2 rows)
- 国をGERMANYに制限します。型が文字列なので大文字と小文字が区別されます。
SELECT * FROM cycling.birthday_list WHERE solr_query = 'blist_nation:GERMANY';
cyclist_name | blist_ | solr_query ----------------+----------------------------------------------------------------------+------------ Claudio HEINEN | {'bday': '27/07/1992', 'blist_age': '23', 'blist_nation': 'GERMANY'} | null (1 rows)
- 23歳までに制限します。