DSE SearchのCQL Solrクエリー
DataStax Enterpriseは、DSE SearchのCQL Solrクエリーの実稼働グレード実装をサポートしています。Solr固有APIを使用せずに全文検索ができる、CQLを中核としたアプリケーションを開発できます。
DataStax Enterpriseは、DSE SearchのCQL Solrクエリーの実稼働グレード実装をサポートしています。Solr固有APIを使用せずに全文検索ができる、CQLを中核としたアプリケーションを開発できます。全文検索クエリーのみが今回のリリースでサポートされます。CQLを使用することで、DSE Searchは、トランザクション・コストを低く抑えながら、既存の情報を変更できる部分的なドキュメント更新をサポートしています。DSE SearchのCQL Solrクエリーを使用する前に、CQLクエリーを処理するようにsolrconfig.xmlを構成します。
このページの説明内容
- DSE SearchのCQL Solrクエリーに必要な構成
- CQL Solrクエリーの制限事項と推奨事項
- CQL Solrクエリー構文
- CQLを使用したDSE Searchクエリー
- タプルとUDTのDSE Searchクエリー
- SolrクエリーによるCQLパーティション・キーの制約の使用
- Solrトークン関数の使用
- クエリー内のセカンダリ・インデックス(2i)
DSE SearchのCQL Solrクエリーに必要な構成
CQL solr_query構文に対応できるのは、検索が有効なノードの場合のみです。
<requestHandler class="com.datastax.bdp.search.solr.handler.component.CqlSearchHandler" name="solr_query" />
CQL Solrクエリーの制限事項と推奨事項
- CQL Solrクエリーはデフォルトでは、LIMIT 10に相当します。
- CQL Solrクエリーの行の取得フェーズでは、LOCAL_ONEの整合性レベルを読み取りに使用します。これとは対照的に、HTTP Solrクエリーではローカル/内部読み取りを使用します。
- ページネーションはデフォルトではオンになっていません。 CQL Solrクエリーでドライバーを使用する場合、ドライバーがページネーション(カーソルとも呼ばれる)を使用する場合にのみページネーションを使用するように指定できます。dse.yamlファイルでcql_solr_query_pagingオプションを設定すると、driverに設定されます。CQL Solrクエリーでカーソルをオフにするには、dse.yamlファイルでcql_solr_query_pagingオプションをoffに設定します。CQLおよびJSONクエリーでpaging:driverパラメーターを使用し、ページネーションを動的に有効化することができます。 .
- Solrの制限事項はページネーションに適用されます。
- クエリーが返す結果セットが小さい場合、ページングを停止するとパフォーマンスが向上します。
CQL Solrクエリー構文
search expressionを含むSELECT文を使用してCQL Solrクエリーを実行できます。
構文
SELECT select expression
FROM table
[WHERE solr_query = 'search expression'] [LIMIT n]
- CQLを使用した検索クエリー
- JSONを使用した検索クエリー
CQLを使用したDSE Searchクエリー
Solrクエリー式は、Solrのqパラメーターによってサポートされている構文を使用します。例:SELECT * FROM keyspace.table WHERE solr_query='name:cat name:dog -name:fish'
特定のカラムを指定すると、DSE Searchは、指定されたカラムだけを取得し、それらのカラムを結果行の一部として返します。DSE Searchは、select式として射影(SELECT a, b, c…)のみをサポートし、関数はサポートしていません。以下の例では指定カラムのみを取得します。SELECT name FROM keyspace.table WHERE solr_query='name:cat name:dog -name:fish'
SELECT * FROM keyspace.table WHERE solr_query='name:cat name:dog -name:fish' LIMIT 1
SELECT count(*) FROM table WHERE solr_query = '...';
CQL Solrクエリーを使用して整合性レベルや順序を設定したり、solr_query以外のWHERE 句を指定したりすることはできません。CQL Solrクエリーの整合性レベルはデフォルトではONEで、変更してはなりません。変更すると、クエリーはエラーを返します。
count()をLIMITまたはファセットと併せて使用すると、エラーが発生します。
ドライバーのすべての応答クエリーにカスタム・ペイロードがあります。ここでは、検出されたドキュメントの総数が返されます。この数値はDSESearch.numFoundとして入力されます。
タプルとUDTのDSE Searchクエリー
- タプル・データ型は、位置指定された型付きのフィールドを要素とする固定要素数の集合を保持します。ユーザー定義型の代わりにタプルを使用できます。
- ユーザー定義型(UDT)を使用すると、テーブル内で関連する情報を持つ複数のフィールドを扱うのが容易になります。UDTはタプルの特殊型です。すべての例とタプルへのドキュメント・リファレンスは、タプルにもUDTにも適用します。
情報を別のテーブルに格納するのではなく、ユーザー定義型を使用して関連する情報のフィールドを表すことで、複数のテーブルを必要とするアプリケーションを、より少ないテーブルを使うようにして簡素化できます。
SolrクエリーによるCQLパーティション・キーの制約の使用
Solr CQLクエリーは、単一のパーティション・キーに対する制約をサポートしています。パーティション・キーの制約が適用されるのは、_partitionKeyに明示的にインデックスが付いているか、スキーマにCassandraパーティション・キーのすべてのコンポーネントが明示的に含まれている場合に限ります。スキーマでは、結合を使用していない場合にパーティション・キーをオーバーライドできます。
SELECT id, date, value FROM keyspace.table WHERE id = 'series1' AND solr_query='value:bar*'"
CREATE TABLE vtbl (k1 text, k2 text, valuetext, PRIMARYKEY ((k1, k2)))
SELECT * FROM vtbl WHERE k1 = '50' AND solr_query='value:*'
SELECT * FROM valuetable WHERE solr_query='{"q":"value:*", "fq":"k1:50"}'
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:*'
- token()はroute.rangeまたはroute.partitionと併用できない
- token()範囲のラップはサポートされていない
- 特定のtoken()範囲が単一のノードによって所有されている必要がある(範囲は複数のノードにまたがってはいけない)
- DSEではSolrシングルパスクエリーが使用されるため、Solrスキーマで宣言されたフィールドのみがクエリー結果で返されます。インデックスを付ける必要はないが、トークンで制限されたクエリーを使用して返す必要があるカラムがある場合は、schema.xmlファイルに格納された非インデックス付きフィールドとして宣言できます。
クエリー内のセカンダリ・インデックス(2i)
SELECT * from users WHERE solr_query = '{"q":"irc:jdoe"}';
Solrで作成されたセカンダリ・インデックスは、cqlshクエリーでCassandra 2iインデックスとして使用できません。たとえば、次の構文は成立しません。 SELECT * FROM users WHERE irc =
'jdoe';
.