IBM Cloudant 照会の使用
このチュートリアルでは、索引を作成し、その索引を使用してデータベースを照会する方法を示します。 また、データをより簡単に見つけるためにさまざまなタイプの照会を作成する方法を示します。
ここではコマンド・ラインからコマンドを実行しますが、これらのタスクは IBM® Cloudant® for IBM Cloud® ダッシュボードを使用して実行することもできます。これにより、各タスクの視覚的な例が示されます。 ダッシュボードについて詳しくは、IBM Cloudant ダッシュボードの使用のチュートリアルを参照してください。
開始前に
開始する前に、以下のチュートリアルに従ってインスタンスを作成し、データベースを作成してデータを取り込みます。
acurl
をセットアップしないことにした場合は、演習で示されている URL の代わりに、curl
で次の URL を使用してください。curl "https://$USERNAME:$PASSWORD@$ACCOUNT.cloudant.com/databasedemo"
。
acurl
別名は、よりセキュアです。 入力しているパスワードを後ろから盗み見されることがなくなります。 また、HTTPS を適用することで、ネットワークを介してパスワードが平文で送信されなくなります。
これで、 始める前にのステップ 2 で作成したデータベースに対して照会を実行する方法を学習できます。
索引の作成
IBM Cloudant 照会では、Mongo スタイルの照会構文を使用して、論理演算子を使用して文書を検索します。 IBM Cloudant 照会は、ビューと検索索引の組み合わせです。
IBM Cloudant 照会を使用すると、照会プランナーがセレクター (照会) を参照して、選択の基準となる適切な索引を判別します。 メモリー内では selector により文書がフィルターに掛けられるため、索引がなくても各種フィールドによって照会を実行できます。
指定された照会に一致する定義済みの索引がない場合、IBM Cloudant は、ID で文書を検索する _all_docs
索引を使用します。 最悪のシナリオでは、ID 別にすべての文書が戻ります (完全な表スキャン)。 フル・テーブル・スキャンの処理にはコストがかかります。 索引を作成することをお勧めします。
索引を作成するには、以下の手順を実行します。
-
以下のサンプル JSON データを
query-demo-index.json
という名前のファイルにコピーします。{ "index": { "fields": [ "descriptionField", "temperatureField" ], "partial_filter_selector": { "descriptionField": { "$eq": "hot" }, "temperatureField": { "$gt": 50 } } }, "ddoc": "query-demo-index", "type": "json" }
-
以下のコマンドを実行して、索引を作成します。
acurl "https://$ACCOUNT.cloudant.com/databasedemo/_index" \ -X POST \ -H "Content-Type: application/json" \ -d \@query-demo-index.json
-
結果を確認します。
{ "result": "created", "id": "_design/query-demo-index", "name": "490441584f9eddb8d09ef234d636b5f3b18e4ce6" }
照会を実行するために索引を作成しなければならないわけではありません。 ただし、作成しない場合は、索引を作成することによって処理が削減されて照会がより効果的になることを示す標識として、以下の警告が結果に組み込まれます。 "Warning": "No matching index found, create an index to optimize query time."
単純照会の実行
この例では、IBM Cloudant 照会が、descriptionField
という値を持つ boiling
に基づいて文書を検索する方法を示します。
照会を実行するには、以下のステップに従います。
- 以下のサンプル JSON を
query1.json
という名前のデータ・ファイルにコピーします。{ "selector": { "descriptionField": "boiling" } }
- 以下のコマンドを実行して、データベースを照会します。
acurl "https://$ACCOUNT.cloudant.com/databasedemo/_find" \ -X POST \ -H "Content-Type: application/json" \ -d \@query1.json
- 照会結果を確認します。
{ "docs": [{ "_id": "91d1fa833d28efe15069604f98de701d", "_rev": "1-f998fc7b89d4466c1e7bb204b1b00f74", "numberField": 1, "nameField": "one", "descriptionField": "boiling", "temperatureField": 100 }], "bookmark": "g1AAAABweJzLYWBgYMpgSmHgKy5JLCrJTq2MT8lPzkzJBYorWBqmGKYlWhgbpxhZpKalGpoamFmaGZikWVqkpJobGKaA9HHA9BGlIwsAmn8eLw", "warning": "No matching index found, create an index to optimize query time." }
次に、2 つのフィールドを使用して、データベース内の文書を検索します。
2 つのフィールドによる照会の実行
この例では、2 つのフィールドを使用して、freezing
および -5
という値を持つ文書を検索します。
検索は、以下の例のような 'selector' 式 を使用して記述されます。
{
"selector": {
"descriptionField": "freezing",
"temperatureField": -5
}
}
selector 式の詳細を追加することで、結果を調整できます。
fields
パラメーターでは、結果に含めるフィールドを指定します。 この例では、以下の例に示すように、 結果に nameField
、descriptionField
、および temperatureField
が含まれています。
{
...
"fields": [
"nameField",
"descriptionField",
"temperatureField"
]
}
照会を実行するには、以下のステップに従います。
- サンプルの JSON をデータ・ファイル
query2.json
にコピーします。{ "selector": { "descriptionField": "freezing", "temperatureField": -5 }, "fields": [ "nameField", "descriptionField", "temperatureField" ] }
- 以下のコマンドを実行して、データベースを照会します。
acurl "https://$ACCOUNT.cloudant.com/databasedemo/_find" \ -X POST \ -H "Content-Type: application/json" \ -d \@query2.json
- 照会結果を確認します。
{ "docs": [{ "nameField": "eight", "descriptionField": "freezing", "temperatureField": -5 }], "bookmark": "g1AAAABweJzLYWBgYMpgSmHgKy5JLCrJTq2MT8lPzkzJBYorpBiYGJolWaSZmaWYpFqmGBiYmKclphhappqZmRglG5uD9HHA9BGlIwsAms8eJw", "warning": "No matching index found, create an index to optimize query time." }
次に、複数の演算子を使用してデータベース内の文書を検索します。
演算子による照会の実行
この例では、$gt
(より大) と $eq
(等しい) の演算子を使用して、
20
度より高い温度、および値 hot
を含む説明が含まれている文書を検索します。 結果には、descriptionField
と temperatureField
が含まれ、温度による降順で表示されます。
以下の例のような selector 式を使用します。
{
"selector": {
"temperatureField": {
"$gt": 50
},
"descriptionField": {
"$eq": "hot"
}
},
"fields": [
"descriptionField",
"temperatureField"
],
"sort": [{
"temperatureField": "desc"
}],
"use_index": "_design/query-demo-index"
}
照会を実行するには、以下のステップに従います。
- 以下のサンプルの JSON をファイル
query3.json
にコピーします。{ "selector": { "descriptionField": { "$eq": "hot" }, "temperatureField": { "$gt": 50 } }, "fields": [ "descriptionField", "temperatureField" ], "sort": [{ "temperatureField": "desc" }], "use_index": "_design/query-demo-index" }
- この照会を実行します。
acurl "https://$ACCOUNT.cloudant.com/databasedemo/_find" \ -X POST \ -H "Content-Type: application/json" \ -d \@query3.json
- 照会結果を確認します。
{ "docs": [{ "descriptionField": "hot", "temperatureField": 97 }, { "descriptionField": "hot", "temperatureField": 75 } ], "bookmark": "g1AAAABbeJzLYWBgYMpgSmHgKy5JLCrJTq2MT8lPzkzJBYorJBoYmKWaWVokpZkamJtaGJskm5slmSenGhulWpibJhqC9HHA9OWATErUAGlkzsgvycoCAEsUF_A" }
これで、IBM Cloudant 照会を使用してデータベースからデータを抽出する方法が理解できました。 詳しくは、 IBM Cloudant 資料を参照してください。