翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
チュートリアル: Amazon OpenSearch Service でドキュメントを作成および検索する
このチュートリアルでは、Amazon OpenSearch Service でドキュメントを作成および検索する方法を説明します。データを JSON ドキュメント形式でインデックスに追加します。OpenSearch Service は、追加した最初のドキュメントに関するインデックスを作成します。
このチュートリアルでは、HTTP リクエストを実行してドキュメントを作成し、ドキュメントの ID を自動的に生成し、ドキュメントに対して基本的な検索および高度な検索を実行する方法を説明します。
注記
このチュートリアルでは、オープンアクセスを持つドメインを使用します。最高レベルのセキュリティを実現するため、仮想プライベートクラウド (VPC) 内にドメインを配置することをお勧めします。
前提条件
このチュートリアルには、次のような前提条件があります。
-
AWS アカウント が必要です。
-
アクティブな OpenSearch Service のドメインが必要です。
ドキュメントのインデックスへの追加
ドキュメントをインデックスに追加するために、Postman
ドキュメントをインデックスに追加するには
-
使用しているドメインの OpenSearch Dashboards URL に移動します。この URL は、OpenSearch Service コンソールのドメインダッシュボードに表示されています。URL はこの形式に従います。
domain-endpoint
/_dashboards/ -
プライマリユーザー名とパスワードを使ってサインインします。
-
左側のナビゲーションパネルを開き、[Dev Tools] (開発ツール) を選択します。
-
新しいリソースを作成するための HTTP 動詞は PUT です。これは、新しいドキュメントとインデックスの作成に使用します。コンソールに次のコマンドを入力します。
PUT fruit/_doc/1 { "name":"strawberry", "color":"red" }
PUT
リクエストは、fruit という名前のインデックスを作成し、ID が 1 である単一のドキュメントをインデックスに追加します。次のレスポンスが生成されます。{ "_index" : "fruit", "_type" : "_doc", "_id" : "1", "_version" : 1, "result" : "created", "_shards" : { "total" : 2, "successful" : 2, "failed" : 0 }, "_seq_no" : 0, "_primary_term" : 1 }
自動的に生成される ID の作成
OpenSearch Service は、ドキュメントの ID を自動的に生成できます。ID を生成するコマンドは、PUT リクエストの代わりに POST リクエストを使用し、(前のリクエストと比較して) ドキュメント ID を必要としません。
デベロッパーコンソールに次のリクエストを入力します。
POST veggies/_doc { "name":"beet", "color":"red", "classification":"root" }
このリクエストは、veggies という名前のインデックスを作成し、ドキュメントをインデックスに追加します。次のレスポンスが生成されます。
{ "_index" : "veggies", "_type" : "_doc", "_id" : "3WgyS4IB5DLqbRIvLxtF", "_version" : 1, "result" : "created", "_shards" : { "total" : 2, "successful" : 2, "failed" : 0 }, "_seq_no" : 0, "_primary_term" : 1 }
レスポンスの追加 _id
フィールドに注意してください。これは、ID が自動的に作成されたことを示します。
注記
URL の _doc
の後には何も入力しません。ここには通常 ID が挿入されます。生成される ID を使用してドキュメントを作成しようとしているため、まだ ID を入力しません。これは更新の際に行います。
POST コマンドを使用したドキュメントの更新
ドキュメントを更新するには、ID 番号を持つ HTTP POST
コマンドを使用します。
最初に、ID が 42
のドキュメントを作成します。
POST fruits/_doc/42 { "name":"banana", "color":"yellow" }
その後、その ID を使用してドキュメントを更新します。
POST fruits/_doc/42 { "name":"banana", "color":"yellow", "classification":"berries" }
このコマンドは、ドキュメントを新しいフィールド classification
で更新します。次のレスポンスが生成されます。
{ "_index" : "fruits", "_type" : "_doc", "_id" : "42", "_version" : 2, "result" : "updated", "_shards" : { "total" : 2, "successful" : 2, "failed" : 0 }, "_seq_no" : 1, "_primary_term" : 1 }
注記
存在しないドキュメントを更新しようとすると、OpenSearch Service はドキュメントを作成します。
一括アクションの実行
POST _bulk
API オペレーションを使用して、1 回のリクエストで 1 つ以上のインデックスに対して複数のアクションを実行できます。一括アクションコマンドは、次の形式になります。
POST /_bulk <action_meta>\n <action_data>\n <action_meta>\n <action_data>\n
各アクションには 2 行の JSON が必要です。まず、アクションの説明またはメタデータを入力します。次の行で、データを入力します。各パートは改行 (\n) で区切られます。挿入のアクションの説明は次のようになります。
{ "create" : { "_index" : "veggies", "_type" : "_doc", "_id" : "7" } }
また、データを含む次の行は次のようになります。
{ "name":"kale", "color":"green", "classification":"leafy-green" }
メタデータとデータをまとめると、一括オペレーションでの 1 つのアクションが表されます。次のように、1 つのリクエストで多くのオペレーションを実行できます。
POST /_bulk { "create" : { "_index" : "veggies", "_id" : "35" } } { "name":"kale", "color":"green", "classification":"leafy-green" } { "create" : { "_index" : "veggies", "_id" : "36" } } { "name":"spinach", "color":"green", "classification":"leafy-green" } { "create" : { "_index" : "veggies", "_id" : "37" } } { "name":"arugula", "color":"green", "classification":"leafy-green" } { "create" : { "_index" : "veggies", "_id" : "38" } } { "name":"endive", "color":"green", "classification":"leafy-green" } { "create" : { "_index" : "veggies", "_id" : "39" } } { "name":"lettuce", "color":"green", "classification":"leafy-green" } { "delete" : { "_index" : "vegetables", "_id" : "1" } }
最後のアクションが delete
であることに注意してください。delete
アクションに続くデータはありません。
ドキュメントの検索
これでクラスターにデータが存在するようになったので、そのデータを検索できます。例えば、すべての根菜類を検索したり、すべての葉菜類の数を取得したり、1 時間あたりにログ記録されたエラーの数を調べたりすることができます。
基本的な検索
基本的な検索は次のようになります。
GET veggies/_search?q=name:l*
リクエストにより、レタスドキュメントを含む JSON レスポンスが生成されます。
高度な検索
リクエスト本文でクエリオプションを JSON として指定すると、より高度な検索を実行できます。
GET veggies/_search { "query": { "term": { "name": "lettuce" } } }
この例では、レタスドキュメントを含む JSON レスポンスも生成します。
ソート
ソートを使用すると、このタイプのクエリをさらに多く実行できます。まず、インデックスを再作成する必要があります。これは、自動フィールドマッピングが、デフォルトではソートできないタイプを選択するためです。次のリクエストを送信して、インデックスを削除して再作成します。
DELETE /veggies PUT /veggies { "mappings":{ "properties":{ "name":{ "type":"keyword" }, "color":{ "type":"keyword" }, "classification":{ "type":"keyword" } } } }
その後、インデックスにデータを再入力します。
POST /_bulk { "create" : { "_index" : "veggies", "_id" : "7" } } { "name":"kale", "color":"green", "classification":"leafy-green" } { "create" : { "_index" : "veggies", "_id" : "8" } } { "name":"spinach", "color":"green", "classification":"leafy-green" } { "create" : { "_index" : "veggies", "_id" : "9" } } { "name":"arugula", "color":"green", "classification":"leafy-green" } { "create" : { "_index" : "veggies", "_id" : "10" } } { "name":"endive", "color":"green", "classification":"leafy-green" } { "create" : { "_index" : "veggies", "_id" : "11" } } { "name":"lettuce", "color":"green", "classification":"leafy-green" }
これで、ソートを使用して検索できるようになりました。このリクエストでは、分類による昇順のソートが追加されます。
GET veggies/_search { "query" : { "term": { "color": "green" } }, "sort" : [ "classification" ] }
関連リソース
詳細については、以下のリソースを参照してください。