ネイティブCQL検索クエリー

ネイティブのCQL文で検索インデックスをクエリーできます。

旧バージョンのDSEで必要とされていたようにsolr_query構文でALLOW FILTERINGを使用しなくても、ネイティブのCQL文を使用して検索インデックスを検索できます。

以下の構文を使用して、ネイティブのCQL SELECT文で結果をフィルター処理します。

SELECT selectors FROM table
 WHERE indexed_column_expression 
[LIMIT n]
[ORDER BY column_name]

ここで、indexed_column_expressionは、以下のネイティブCQL検索クエリーの例におけるWHERE文です。

すべてのカラムに対する均等な検索

カラムがプライマリ・キーの一部になっているかどうか、または、すべて指定されているかどうかが不明な場合でも、すべての検索インデックス付きカラムを直接検索します。
SELECT * FROM customer.region1 WHERE title=’Anaisa Pye’
SELECT * FROM customer.region1 WHERE id LIKE ’237%’

演算子

LIKE演算子、IS NOT NULL演算子、!=演算子を含む、標準のCQL演算子を使用して、インデックス付きのすべてのカラムを検索します。

SELECT * FROM customer.region1 WHERE id LIKE ’237%’
SELECT * FROM customer.region1 WHERE title IS NOT NULL
SELECT * FROM customer.region1 WHERE title!=’Anaisa Pye’
SELECT * FROM customer.region1.solr WHERE title=’Anaisa Pye’
SELECT * FROM customer.region1 WHERE field >0 and field <=100
SELECT * FROM customer.region1 WHERE title LIKE ’Anais%’
SELECT * FROM customer.region1 WHERE title LIKE ’%naisa’
SELECT * FROM customer.region1 WHERE title LIKE ’%nais%’
SELECT * FROM customer.region1 WHERE title IN (’Anaisa Pye’, ‘Karlsbrunn’)
SELECT * FROM customer.region1 WHERE collection CONTAINS ’Anaisa Pye’

コレクション

リストとセットでは、CONTAINS演算子のみがサポートされます。
SELECT * FROM customer.region1 WHERE title IS NOT NULL AND collection CONTAINS ’Anaisa Pye’ AND age > 35

マップ

dynamicfieldをマップ・エントリー等価構文と共に使用してマップを検索します。

SELECT * FROM customer.region1 WHERE dynamicfield['dynamicfield_key1'] = 'value1'

プリペアド・ステートメント

クエリー分析のオーバーヘッドを削除してコーディネーターのワークロードを軽減するには、入力パラメーターとして2つのクエスチョン・マークを使用します。

SELECT id FROM customer.region1 WHERE title LIKE ? limit ?

トークン化テキスト

旧バージョンのDSEのsolr.TextFieldテキスト型とは異なり、CQLテキスト型のデフォルトはsolr.StrFieldです。クエリーでは、トークン化/分析が検討されるテキスト・カラムで次の条件を使用します。
インデックスの基準 トークン化 クエリーの動作
solr.StrField なし 完全一致またはワイルドカード一致が予想どおり実行されます
solr.TextField あり 単一語句のクエリー・マッチングを使用します。
トークン化されたテキストは、LIKE、IS NOT NULL、および単一トークンの一致で制限されます。複数トークンの一致はサポートされていません。

StrFieldとTextField

これらの例で、idはStrFieldによってインデックスが作成され、titleはTextFieldによってインデックスが作成されます
id           | body | date | solr_query | title
-------------+------+------+------------+-----------------
test1 	| null | null |  null      | This is a test1
test2 text   | null | null |  null      | This is a test2
idに対する完全一致は存在しないため、このクエリーの一致はありません。
SELECT * FROM customer.region1 WHERE id LIKE 'test';
このクエリーでは、両方の行が一致するようにワイルドカードの*を使用します。
select * from customer.region1 where id LIKE 'test%';
このクエリーには、titleマルチトークン一致について未定義の動作があります。
select * from customer.region1 where id LIKE 'test%' and title LIKE 'is a';
一致する行はありません。idは一致しますがtitleは一致しません。
SELECT * FROM customer.region1 WHERE id LIKE 'test%' AND title LIKE 'is a';
予想どおり両方の行が一致します。
SELECT * FROM customer.region1 WHERE id LIKE 'test%' AND title LIKE 'is';
予想どおり両方の行が一致し、titleで単一トークンが一致します。
SELECT * FROM customer.region1 WHERE id LIKE 'test%' AND title LIKE 'test%';

タプルとUDT

タプルおよびユーザー定義型(UDT)に対するクエリーでは、等号(=)演算子のみがサポートされています。クエリーは、タプルまたはUDTのすべての要素を提供する必要があります。ネストされたタプル、UDT、コレクションのいずれかを含むクエリーは、演算子の範囲の制約によりサポートされません。

この例のクエリーは、タプルのすべての要素を提供します。
SELECT * FROM customer.region1 WHERE skill={name:'masonry',type:'type1'}