クエリーセレクタの構文
IBM Cloudant 照会言語は、対象の文書を記述する JSON オブジェクトとして表されます。 この構造内では、特別に指定されたフィールドを使用して条件ロジックを適用できます。
IBM Cloudant 照会言語には、MongoDB 照会文書といくつかの類似点がありますが、これらの類似点は、目的の共通性に起因するもので、関数または結果が同じになるとは限りません。
セレクターの基本
基本のセレクター構文では、1 つ以上のフィールドと、それらのフィールドに必要な対応する値を指定する必要があります。 以下のセレクターの例は、値 director を含む Lars von Trier フィールドを持つすべての文書に一致します。
単純なセレクターの例を以下に示します。
{
"selector": {
"director": "Lars von Trier"
}
}
索引の作成時に "type":"text" を指定してフルテキスト索引を作成した場合、$text 演算子を使用して一致する文書を選択できます。 以下の例では、フルテキスト索引が検査され、
Bond という語を含む文書が検出されます。
full_text 索引に対する単純なセレクターの例を以下に示します。
{
"selector": {
"$text": "Bond"
}
}
演算子を組み合わせることによって、より複雑なセレクター式を作成できます。 ただし、
json タイプの IBM Cloudant 照会索引の場合、照会の$regex基本* として * などの「組み合わせ」または「配列論理」演算子を使用することはできません。 等号演算子のみ、 $eq、
$gt,
$gte,
$lt, そして、 $lte (ただし*、* $ne )は、より複雑なクエリのベースとして使用することができる。 複雑なセレクター式の作成について詳しくは、
セレクター式の作成を参照してください。
2 つのフィールドを含むセレクター
以下の例では、セレクターは、name を含む Paul フィールドを持ち、かつ 値が「Boston」の location フィールドも持つすべての文書に一致します。
複雑なセレクターの例を以下に示します。
{
"selector": {
"name": "Paul",
"location": "Boston"
}
}
サブフィールド
ネストされたオブジェクトのフィールドまたはサブフィールドの値を指定するには、より複雑なセレクターを使用します。 例えば、フィールド および サブフィールドを指定するための標準 JSON 構造を使用できます。
JSON オブジェクト内のフィールドとサブフィールド・セレクターの例を以下に示します。
{
"selector": {
"imdb": {
"rating": 8
}
}
}
同等の短縮形では、ドット表記を使用して、フィールド名とサブフィールド名を単一の名前に結合します。
ドット表記を使用する同等のフィールドおよびサブフィールド・セレクターの例を以下に示します。
{
"selector": {
"imdb.rating": 8
}
}
より複雑なセレクタ式を構築する
一般に、引数を取る演算子がある場合、その引数自体を、独自の引数を持つ別の演算子にすることができます。 この拡張により、より複雑なセレクター式が可能になります。
$regex などの組み合わせ論理演算子または配列論理演算子を使用すると、JSON タイプの索引を使用するときにデータベース全体がスキャンされ、パフォーマンスが低下する可能性があります。 等号演算子のみ、例えば $eq、
$gt $gte、、 ( は不可)、インデックス検索を有効にする。 $lt $lte $ne 索引が効率的に使用されるようにするには、照会ごとに Explain プランを分析します。
ほとんどのセレクター式は、演算子に対して期待どおりに動作します。
$regex 演算子で使用されるマッチング・アルゴリズムは、現在のところ、 Compatible Regular Expression (PCRE) ライブラリに基づいている。
Perl 互換正規表現(PCRE)ライブラリに基づいている。 ただし、すべての PCRE ライブラリーが実装されるわけではありません。 さらに、
$regex 演算子の一部は、PCRE によって提供されるものを越えています。 実装されているものについての詳細は
Erlang正規表現の情報を参照してください。
$text 演算子を使う
$text 演算子は、標準アナライザーを使用した Lucene 検索に基づいています。 この演算子は大/小文字を区別せず、すべての単語に一致します。 ただし、
$text 演算子は、ワイルドカード、ファジー・マッチ、近接検出など、Lucene の完全な構文をサポートしていません。
詳しくは、検索の資料を参照してください。
$text 演算子は、文書内で見つかったすべてのストリングに適用されます。 この演算子は、フィールド名のコンテキストに置くと無効になります。