IBM Cloud Docs
IBM Cloudant 照会の処理

IBM Cloudant 照会の処理

IBM® Cloudant® for IBM Cloud® 照会は、IBM Cloudant データベースの 宣言 JSON 照会構文です。 json または text タイプの索引を IBM Cloudant で使用できます。

以下の場合には、json タイプの照会にして索引の作成方法を指定できます。

  • 検索するデータが正確にわかっている。
  • ストレージと処理の所要量を最小限に抑える必要がある。

ただし、データを検索する際の柔軟性を最大にするには、通常、text タイプの索引を作成します。 text タイプの索引には、文書内のすべてのフィールドを自動的に索引付けするための単純なメカニズムがあります。

text 索引のほうが柔軟性が向上しますが、作成には時間がかかり、json 索引よりも多くのストレージ・リソースを必要とする場合があります。

索引の作成

以下のいずれかのタイプの索引を作成できます。

  • "type": "json"
  • "type": "text"

type=json 索引の作成

データベース $DATABASE 内に JSON 索引を作成するには、要求本文内の索引を記述する JSON オブジェクトを使用して、POST/$DATABASE/_index 要求を行います。 JSON オブジェクトの type フィールドは json に設定する必要があります。 JSON 索引は、パーティション化またはグローバルにすることができます。このオプションは、partitioned フィールドを使用して設定します。

HTTP を使用して JSON タイプの索引を要求する例を以下に示します。

POST /$DATABASE/_index HTTP/1.1
Content-Type: application/json

foo-partitioned-index というフィールドの foo というパーティション化索引を作成する JSON オブジェクトの例を以下に示します。

{
    "index": {
        "fields": ["foo"]
    },
    "name" : "foo-partitioned-index",
    "type" : "json",
    "partitioned": true
}

bar-global-index というフィールドの bar というグローバル索引を作成する JSON オブジェクトの例を以下に示します。

{
    "index": {
        "fields": ["bar"]
    },
    "name" : "bar-global-index",
    "type" : "json",
    "partitioned": false
}

返される JSON の例を以下に示します。索引が作成されたことを確認します。

{
    "result": "created"
}
リクエスト・ボディのフォーマット
フィールド 説明
index fields - ソート構文を使用するフィールド名の JSON 配列。 ネストされたフィールドも使用できます (例: person.name)。
ddoc (オプション) 索引が作成される設計文書の名前。 デフォルトでは、各索引は独自の設計文書内に作成されます。 効率性のために索引を設計文書にグループ化できます。 ただし、設計文書内の 1 つの索引を変更すると、同じ文書内の他のすべての索引が無効になります。
type (オプション) json または text を指定できます。 デフォルトは json です。
name (オプション) 索引の名前。 名前を指定しない場合は、名前が自動的に生成されます。
partitioned (オプション、ブール値) この索引がパーティション化されているかどうかを判別します。 詳しくは、partitioned フィールドを参照してください。

partitioned フィールド

このフィールドでは、作成する索引をパーティション化索引にするか、グローバル索引にするかを設定します。

分割されたフィールド値
説明 注記
true 索引をパーティション化索引として作成します。 パーティション・データベースでのみ使用できます。
false 索引をグローバル索引として作成します。 どのデータベースでも使用できます。

デフォルトは、データベースの partitioned 設定に従います。

デフォルトのパーティション値
データベースはパーティション化されていますか? デフォルトの partitioned 使用可能な値
ある true true, false
いいえ false false

It's important to reiterate that the default partitioned value is true パーティショニングされたデータベースで作成されたインデックスの場合。 このデフォルト値は、グローバル照会を満たすために索引を使用できない ことを意味します。

戻りコード
コード 説明
200 索引が正常に作成されたか、データベースに存在しています。
400 間違った要求 - 要求本文のフォーマットが指定されていません。

type=text 索引の作成

単一のテキスト索引を作成する場合は、デフォルト値を使用することをお勧めしますが、一部の有用な索引属性は変更できます。

text 索引は、パーティション化またはグローバルにすることができます。このオプションは、partitioned フィールドを使用して設定します。

フルテキスト索引 (FTI) の場合、typetext に設定する必要があります。

name 属性と ddoc 属性は、索引を設計文書にグループ化するためのものです。 カスタム・ストリング値を使用して索引グループを参照するには、これらの属性を使用します。 これらのフィールドに値が指定されていない場合は、ハッシュ値が自動的に取り込まれます。

同じ ddoc 値を持つ複数のテキスト索引をデータベースに作成する場合は、少なくとも ddoc 値と name 値を知っている必要があります。 同じ ddoc 値を持つ複数の索引を作成すると、それらは同じ設計文書に配置されます。 一般的には、各テキスト索引を独自の設計文書に入れる必要があります。

詳しくは text について 参照のこと。

パーティション化索引の作成を要求する JSON 文書の例を以下に示します。

{
    "index": {
        "fields": [
            {
                "name": "Movie_name",
                "type": "string"
            }
        ]
    },
    "name": "Movie_name-text",
    "type": "text",
    "partitioned": true
}

グローバル索引の作成を要求する JSON 文書の例を以下に示します。

{
    "index": {
        "fields": [
            {
                "name": "Movie_name",
                "type": "string"
            }
        ]
    },
    "name": "Movie_name-text",
    "type": "text",
    "partitioned": false
}

より複雑なパーティション化索引の作成を要求する JSON 文書の例を以下に示します。

{
    "type": "text",
    "name": "my-index",
    "ddoc": "my-index-design-doc",
    "index": {
        "default_field": {
            "enabled": true,
            "analyzer": "german"
        },
        "selector": {},
        "fields": [
            {"name": "married", "type": "boolean"},
            {"name": "lastname", "type": "string"},
            {"name": "year-of-birth", "type": "number"}
        ]
    },
    "partitioned": true
}

index フィールド

index フィールドには、テキスト索引に固有の設定が含まれます。

すべての文書のすべてのフィールドに自動的に索引を付けるには、以下の単純な構文を使用します。

"index": {}

索引付けプロセスは、データベース内のすべての文書のすべてのフィールドを全検索します。

サンプル映画のデモデータベース では、データベース内のすべてのフィールドとすべてのドキュメントを含むテキストインデックスの例を見ることができます。

大規模なデータ・セットでは、すべての文書のすべてのフィールドに索引を付ける場合、リソースを消費するアクティビティーになる可能性があるため注意してください。

すべての文書内のすべてのフィールドの索引の作成を要求する JSON 文書の例を以下に示します。

{
	"type": "text",
	"index": { }
}

default_field フィールド

default_field 値では、$text 演算子を索引で使用する方法を指定します。

default_field には、以下の 2 つのキーがあります。

デフォルト・フィールド・キー
キー 説明
enabled default_field index を有効または無効にします。 デフォルト値はtrueです。

analyzerdefault_field キーでは、索引でテキストを分析する方法を指定します。 後で、 $text 演算子を使用して索引を照会できます。 詳しくは、検索の資料で代替アナライザーを参照してください。 文書が英語以外の言語で索引付けされている場合、または E メール・アドレスの突き合わせなど、アナライザーに他の特別な要件がある場合は、代替アナライザーを選択できます。

default_field が指定されていない場合、または空のオブジェクトが指定されている場合は、デフォルトで true になり、standard アナライザーが使用されます。

fields 配列

fields 配列には、文書ごとに索引付けする必要があるフィールドのリストが含まれます。 特定のフィールドについてのみ索引照会が分かっている場合は、このフィールドを使用して索引のサイズを制限できます。 各フィールドでは、索引付けするタイプも指定する必要があります。 指定可能なタイプを以下のリストに示します。

  • "boolean"
  • "string"
  • "number"

index_array_lengths フィールド

IBM Cloudant 照会テキスト索引には、index_array_lengths というプロパティーがあります。 このプロパティーを明示的に設定しない場合のデフォルト値は、 true です。

このフィールドが true に設定されている場合、索引には追加の作業が必要です。 この作業には、すべての配列のすべての文書のスキャンと、検出された各配列の長さを保持するフィールドの作成が含まれます。

以下の状況では、index_array_lengths フィールドを false に設定することをお勧めします。

  • 配列の長さを知る必要がない。
  • 演算 $size は使わない。
  • データベース内の文書が複雑であるか、完全に制御下にあるわけではない。 そのため、配列の長さを判別して保管するために必要な追加処理の影響を見積もることが難しい。

The $size operator requires that you set the index_array_lengths field to true. 設定しない場合、演算子は機能しません。

実動システムでのパフォーマンスを最適化するための推奨設定を含む JSON 文書の例を以下に示します。

{
	"default_field": {
		"enabled": false
	},
	"index_array_lengths": false
}

partitioned フィールド

このフィールドでは、作成する索引をパーティション化索引にするか、グローバル索引にするかを決定します。

分割されたフィールド値
説明 注記
true 索引をパーティション化索引として作成します。 パーティション・データベースでのみ使用できます。
false 索引をグローバル索引として作成します。 どのデータベースでも使用できます。

デフォルトは、データベースの partitioned 設定に従います。

データベースのパーティション設定
データベースはパーティション化されていますか? デフォルトの partitioned 使用可能な値
ある true true, false
いいえ false false