インデックスの作成
既存のテーブルに対して新しい検索インデックスを作成します。
既存のテーブルの検索インデックスを作成するには、CREATE SEARCH INDEXを使用します。
注: CQLコマンドで作成されたインデックスは、データ・センター内のすべてのSearchノードに自動的に分散されます。
制約事項:
Solrフィールド名ポリシーがインデックス・フィールド名に適用されます。
- すべてのフィールドに名前(
name
)がある必要があります。 - フィールド名は英数字とアンダースコアのみで構成されている必要があります。
- フィールド名の先頭に数字は使用できません。
- 先頭と末尾の両方にアンダースコアが付いた名前(たとえば、
_version_
)は予約されています。
注: これらの条件を準拠していないフィールド名は、すべてのコンポーネントでサポートされません。後方互換性は保証されません。
Searchノードでcqlshを起動する
Searchノードに接続してCQL検索管理コマンドを使用します。
Searchノードに接続してCQL検索管理コマンドを使用します。
手順
-
クラスター内で検索を実行しているノードを調べます。
dsetool status
ヒント: DSE Searchの操作は、検索が有効になっているノードでのみ使用できます。DataStaxでは、単一ワークロードのデータ・センターを推奨しています。以下の例は、クラスター内のすべてのノードが同じ物理位置の同じラックにあり、ノードがそれぞれのワークロードに基づいてデータ・センターに分けられている開発環境を示しています。DC: Main Workload: Cassandra Graph: no ====================================================== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Owns VNodes Rack Health [0,1] UN 10.10.10.111 15.51 MiB ? 32 rack1 0.90 UN 10.10.10.113 19.51 MiB ? 32 rack1 0.90 DC: Search Workload: Search Graph: no ====================================================== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Owns VNodes Rack Health [0,1] UN 10.10.10.108 18.13 MiB ? 32 rack1 0.90 UN 10.10.10.110 17.4 MiB ? 32 rack1 0.90
-
大きいデータセットでは、cqlshタイムアウトの値を大きくします。
export CQLSH_SEARCH_MANAGEMENT_TIMEOUT_SECONDS=900;
-
Searchノードで
cqlsh
セッションを起動します。cqlsh hostname
リモート・ホストでCQLセッションが起動します。Connected to cluster1 at 10.10.10.108:9042. [cqlsh 5.0.1 | Cassandra 3.11.0.1805 | DSE 5.1.3 | CQL spec 3.4.4 | Native protocol v4] Use HELP for help. cqlsh>
デフォルト値を使用した検索インデックスの作成
デフォルト設定を使用して検索インデックスを作成します。
DataStax EnterpriseのCREATE SEARCH INDEXを使用して、すべてのSearchノードに自動的に配布される既存のテーブルの検索インデックスを生成します。
デフォルト値を使用して、検索インデックス(スキーマと構成)が生成されます。スキーマと構成は、内部でsolr_admin.resources
テーブルに格納され、XML形式で表示されます。
既存のテーブルに対して新しい検索インデックスを作成します。
CREATE SEARCH INDEX ON keyspace_name.table_name;
デフォルト設定を使用して、すべてのカラムのインデックスが作成されます。
デフォルトのクエリー・フィールドの設定
クエリーでフィールドが指定されない場合に使用するフィールドを設定します。
手順
-
新しいインデックス専用フィールドを作成します。
ALTER SEARCH INDEX SCHEMA ON wiki.solr ADD fields.field[ @name='catch_all', @type='TextField', @multiValued='true'];
注: この新しいフィールドには2つのフィールドの値が含まれるため、multiValuedをtrueに設定します。保留中のスキーマ変更を表示します。DESCRIBE PENDING SEARCH INDEX SCHEMA ON wiki.solr ;
新しいフィールドは太字で示されています。<?xml version="1.0" encoding="UTF-8" standalone="no"?> <schema name="autoSolrSchema" version="1.5"> <types> <fieldType class="org.apache.solr.schema.TextField" name="TextField"> <analyzer> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.LowerCaseFilterFactory"/> </analyzer> </fieldType> <fieldType class="org.apache.solr.schema.TrieDateField" name="TrieDateField"/> <fieldType class="org.apache.solr.schema.StrField" name="StrField"/> </types> <fields> <field indexed="true" multiValued="false" name="body" stored="true" type="TextField"/> <field docValues="true" indexed="true" multiValued="false" name="real_date" stored="true" type="TrieDateField"/> <field indexed="true" multiValued="false" name="title" stored="true" type="TextField"/> <field indexed="true" multiValued="false" name="id" stored="true" type="StrField"/> <field indexed="true" multiValued="false" name="date" stored="true" type="TextField"/> <field indexed="true" multiValued="true" name="catch_all" type="TextField"/> </fields> <uniqueKey>id</uniqueKey> </schema>
-
すべてのCQLカラムからデータを収集するようにコピー・フィールド・ディレクティブを設定します。
ALTER SEARCH INDEX SCHEMA ON wiki.solr ADD copyField[@source='title', @dest='catch_all']; ALTER SEARCH INDEX SCHEMA ON wiki.solr ADD copyField[@source='body', @dest='catch_all'];
保留中のスキーマ変更を表示します。DESCRIBE PENDING SEARCH INDEX SCHEMA ON wiki.solr ;
新しいコピー・フィールド・ディレクティブは以下に太字で示されています。<?xml version="1.0" encoding="UTF-8" standalone="no"?> <schema name="autoSolrSchema" version="1.5"> <types> <fieldType class="org.apache.solr.schema.TextField" name="TextField"> <analyzer> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.LowerCaseFilterFactory"/> </analyzer> </fieldType> <fieldType class="org.apache.solr.schema.TrieDateField" name="TrieDateField"/> <fieldType class="org.apache.solr.schema.StrField" name="StrField"/> </types> <fields> <field indexed="true" multiValued="false" name="body" stored="true" type="TextField"/> <field docValues="true" indexed="true" multiValued="false" name="real_date" stored="true" type="TrieDateField"/> <field indexed="true" multiValued="false" name="title" stored="true" type="TextField"/> <field indexed="true" multiValued="false" name="id" stored="true" type="StrField"/> <field indexed="true" multiValued="false" name="date" stored="true" type="TextField"/> <field indexed="true" multiValued="true" name="catch_all" type="TextField"/> </fields> <uniqueKey>id</uniqueKey> <copyField dest="catch_all" source="body"/> <copyField dest="catch_all" source="title"/> </schema>
-
検索インデックス構成でデフォルト・フィールドを定義します。
ALTER SEARCH INDEX CONFIG ON wiki.solr SET defaultQueryField = 'catch_all' ;
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <config> <luceneMatchVersion>LUCENE_6_0_1</luceneMatchVersion> <dseTypeMappingVersion>2</dseTypeMappingVersion> <directoryFactory class="solr.StandardDirectoryFactory" name="DirectoryFactory"/> <indexConfig> <ramBufferSizeMB>512</ramBufferSizeMB> <rt>false</rt> </indexConfig> <jmx/> <updateHandler> <autoSoftCommit> <maxTime>10000</maxTime> </autoSoftCommit> </updateHandler> <query> <filterCache class="solr.SolrFilterCache" highWaterMarkMB="2048" lowWaterMarkMB="1024"/> <enableLazyFieldLoading>true</enableLazyFieldLoading> <useColdSearcher>true</useColdSearcher> <maxWarmingSearchers>16</maxWarmingSearchers> </query> <requestDispatcher> <requestParsers enableRemoteStreaming="true" multipartUploadLimitInKB="2048000"/> <httpCaching never304="true"/> </requestDispatcher> <requestHandler class="solr.SearchHandler" default="true" name="search"> <lst name="defaults"> <str name="df">catch_all</str> </lst> </requestHandler> <requestHandler class="com.datastax.bdp.search.solr.handler.component.CqlSearchHandler" name="solr_query"> <lst name="defaults"> <str name="df">catch_all</str> </lst> </requestHandler> <requestHandler class="solr.UpdateRequestHandler" name="/update"/> <requestHandler class="solr.UpdateRequestHandler" name="/update/csv" startup="lazy"/> <requestHandler class="solr.UpdateRequestHandler" name="/update/json" startup="lazy"/> <requestHandler class="solr.FieldAnalysisRequestHandler" name="/analysis/field" startup="lazy"/> <requestHandler class="solr.DocumentAnalysisRequestHandler" name="/analysis/document" startup="lazy"/> <requestHandler class="solr.admin.AdminHandlers" name="/admin/"/> <requestHandler class="solr.PingRequestHandler" name="/admin/ping"> <lst name="invariants"> <str name="qt">search</str> <str name="q">solrpingquery</str> </lst> <lst name="defaults"> <str name="echoParams">all</str> </lst> </requestHandler> <requestHandler class="solr.DumpRequestHandler" name="/debug/dump"> <lst name="defaults"> <str name="echoParams">explicit</str> <str name="echoHandler">true</str> </lst> </requestHandler> </config>
-
スキーマと構成を再度読み込んで、保留中の検索インデックス・スキーマと構成をアクティブにします。
RELOAD SEARCH INDEX ON wiki.solr ;
-
インデックスをリビルドして、既存のデータの検索インデックスを更新します。
REBUILD SEARCH INDEX ON wiki.solr ;
結合を無効にしたインデックスの生成
領域を節約する必要がない場合、インデックスの結合を無効にします。
デフォルトでは、複数のパーティション・キー・フィールドが1つのフィールド_partitionKey
に統合され、インデックス間の結合をサポートするために文字列フィールドとして格納されます。結合が必要ない場合は、結合を無効にしてインデックスを作成します。
注: インデックスの作成後に結合を無効にするには、「検索インデックス結合の構成」を参照してください。
手順
- 結合を無効にして検索インデックスを作成します。
-
結合が無効になっていることを確認します。
DESCRIBE ACTIVE SEARCH INDEX SCHEMA ON demo.health_data ;
... <field docValues="false" indexed="false" multiValued="false" name="_partitionKey" omitNorms="true" stored="false" type="StrField"/> ...