ネイティブ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です。クエリーでは、トークン化/分析が検討されるテキスト・カラムで次の条件を使用します。
トークン化されたテキストは、LIKE、IS NOT NULL、および単一トークンの一致で制限されます。複数トークンの一致はサポートされていません。
インデックスの基準 | トークン化 | クエリーの動作 |
---|---|---|
solr.StrField | なし | 完全一致またはワイルドカード一致が予想どおり実行されます |
solr.TextField | あり | 単一語句のクエリー・マッチングを使用します。 |
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'}