パーティション・キーの識別
Solrクエリーも使用する際にパーティション・キーで結果をフィルター処理するための制限事項とガイドライン。
Solr CQLクエリーでは、1つのパーティション・キーに制限することができます。パーティション・キー制限は、_partitionKeyのインデックスが明示的に作成されているか、データベース・パーティション・キーのコンポーネントがすべて明示的にスキーマに含まれている場合に限り、機能します。スキーマで結合を使用しない場合、override _partitionKeyをオーバーライドできます。
たとえば、
SELECT id, date, value FROM keyspace.table WHERE id = 'series1' AND solr_query='value:bar*';
CQLパーティション・キー制限は、パーティション・キーが完全に指定されている場合に限り、機能します。
CREATE TABLE vtbl (k1 text, k2 text, value text, PRIMARY KEY (k1, k2));
たとえば、上のテーブルとともに、以下のようなクエリーは使用しないでください。
SELECT * FROM vtbl WHERE k1 = '50' AND solr_query='value:*'
部分的に指定されている複合パーティション・キー、
"fq":"k1:50"
に対してフィルター・クエリーを使用します。SELECT * FROM valuetable WHERE solr_query='{"q":"value:*", "fq":"k1:50"}'
Solrトークン関数を使用してクエリーが実行されるノードの制限
Solr CQLクエリーでは、トークン関数の限定的な使用をサポートしています。トークン関数を使用すると、クエリー対象ノードを制限する限定的な検索が可能になり、レイテンシーを低減できます。
注: Solrトークン関数の使用は上級ユーザーのみとし、特定のユース・ケースに限りサポートされています。
たとえば、
SELECT id, value FROM keyspace.table WHERE token(id) >= -3074457345618258601 AND token(id) <= 3074457345618258603 AND solr_query='id:*'
オープンな範囲を使用した例:
SELECT id, value FROM keyspace.table WHERE token(id) >= 3074457345618258604 AND solr_query='id:*'
Solr CQLクエリーでのトークン関数の使用には以下の制約事項が適用されます。
- token()は、route.rangeまたはroute.partitionとともに使用できません。
- Wrapping token()範囲はサポートされていません。
- 指定されたtoken()範囲が1つのノードに所有されていなければなりません。範囲が複数のノードにまたがることはできません
- DSEはSolrの単一パス・クエリーを使用するため、検索スキーマで宣言されているフィールドのみがクエリー結果で返されます。インデックスを作成する必要はないが、トークン制限付きクエリーを使用して取得する必要があるカラムがある場合は、そのカラムをインデックスなしの格納されているフィールドとしてschema.xmlファイル内で宣言します。
結合を使用しない場合の_partitionKeyのオーバーライド
結合に対しては、特殊な_partitionKey
フィールドが内部で使用されます。結合を使用する予定がない場合は、indexed
プロパティとdocValues
プロパティについてのみschema.xmlファイルでこのフィールドの宣言をオーバーライドできます。
_partitionKey
フィールドのインデックスが作成されないようにするには、indexed
をfalse
に設定します。<field name="_partitionKey" type="string" indexed="false"/>
_partitionKey
フィールドに対してdocValuesを構築しないようにするには、docValues
をfalse
に設定します。<field name="_partitionKey" type="string" docValues="false"/>