オープンソースの Elasticsearch は、curl コマンドを実行するか、Kibana コンソールを使用して呼び出すことができる一連の RESTful API オペレーションを提供します。このトピックでは、curl コマンドを使用して API オペレーションを呼び出し、Alibaba Cloud Elasticsearch クラスタへのアクセス、クラスタ情報のクエリ、インデックスとドキュメントの作成、およびドキュメントの検索を行う方法について説明します。
背景情報
このトピックを参照して、curl コマンドを実行することで API オペレーションを呼び出すことができます。Kibana コンソールを使用して API オペレーションを呼び出す方法の詳細については、「Kibana コンソールにログオンする」をご参照ください。
前提条件
Elasticsearch クラスタへのアクセス
- ECS インスタンスに接続します。詳細については、「手順 3:ECS インスタンスに接続する」をご参照ください。この例では、共通ユーザーが使用されています。
- 次のコマンドを実行して、Elasticsearch クラスタにアクセスします。システムに
curl command not found
と表示された場合は、sudo yum install curl
コマンドを実行して、ECS インスタンスに cURL をインストールする必要があります。curl -u <user>:<password> http://<host>:<port>
変数 説明 変数 説明 <user> Elasticsearch クラスタへのアクセスに使用するユーザー名。elastic 以外のユーザー名を使用することをお勧めします。 - elastic アカウントを使用して Elasticsearch クラスタにアクセスし、その後アカウントのパスワードをリセットした場合、新しいパスワードが有効になるまでに時間がかかる場合があります。この期間中は、elastic アカウントを使用してクラスタにアクセスすることはできません。そのため、Elasticsearch クラスタへのアクセスに elastic アカウントを使用しないことをお勧めします。Kibana コンソールにログオンし、必要なロールを持つユーザーを作成し、そのユーザーとして Elasticsearch クラスタにアクセスできます。詳細については、「Elasticsearch X-Pack が提供する RBAC メカニズムを使用してアクセス制御を実装する」をご参照ください。
- Elasticsearch クラスタのバージョンに with_X-Pack が含まれている場合は、Elasticsearch クラスタにアクセスするためにユーザー名とパスワードの両方を指定する必要があります。
<password> Elasticsearch クラスタへのアクセスに使用するパスワード。elastic アカウントのパスワードは、Elasticsearch クラスタの作成時に指定されます。パスワードを忘れた場合は、リセットできます。パスワードのリセット手順と注意事項については、「Elasticsearch クラスタのアクセス パスワードをリセットする」をご参照ください。 <host> Elasticsearch クラスタの [内部エンドポイント]。内部エンドポイントは、Elasticsearch クラスタの 基本情報 ページから取得できます。 <port> Elasticsearch クラスタへのアクセスに使用するポート番号。デフォルトのポート番号は [9200] です。ポート番号は、Elasticsearch クラスタの 基本情報 ページから取得できます。 コマンド例:curl -u <user>:<password> http://es-cn-vxxxxx****.elasticsearch.aliyuncs.com:9200
コマンドが正常に実行されると、次の図に示す結果が返されます。
クラスタの情報のクエリ
- クラスタのヘルスステータスをクエリする
curl -u <user>:<password> -XGET 'http://es-cn-vxxxxx****.elasticsearch.aliyuncs.com:9200/_cat/health?v'
コマンドが正常に実行されると、次の図に示す結果が返されます。 - クラスタ内のインデックスをクエリする
curl -u <user>:<password> -XGET 'http://es-cn-vxxxxx****.elasticsearch.aliyuncs.com:9200/_cat/indices?v'
コマンドが正常に実行されると、次の図に示す結果が返されます。
インデックスとドキュメントの作成
- インデックスを作成する
curl -u <user>:<password> -XPUT 'http://es-cn-vxxxxx****.elasticsearch.aliyuncs.com:9200/product_info'
前の例では、product_info という名前のインデックスが作成されます。
コマンドが正常に実行されると、次の図に示す結果が返されます。 - インデックスのマッピングを設定する
curl -u <user>:<password> -XPUT 'http://es-cn-vxxxxx****.elasticsearch.aliyuncs.com:9200/product_info/_doc/_mapping?include_type_name=true' -H 'Content-Type: application/json' -d ' { "_doc":{ "properties": { "productName": {"type": "text","analyzer": "ik_smart"}, "annual_rate":{"type":"keyword"}, "describe": {"type": "text","analyzer": "ik_smart"} } } }'
コマンドが正常に実行されると、次の図に示す結果が返されます。前の例では、product_info インデックスのタイプが _doc に設定されています。インデックスには、productName、annual_rate、および describe フィールドが含まれています。 V7.0 以降の Elasticsearch クラスタを使用する場合は、クラスタ内のインデックスのタイプは _doc である必要があります。この例では、フィールドのトークナイザーも定義しています。
- ドキュメントを作成してデータを挿入する
- 単一のドキュメントを作成する
curl -u <user>:<password> -XPOST 'http://es-cn-vxxxxx****.elasticsearch.aliyuncs.com:9200/product_info/_doc/1?pretty' -H 'Content-Type: application/json' -d ' { "productName":"testpro", "annual_rate":"3.22%", "describe":"testpro" }'
コマンドが正常に実行されると、次の図に示す結果が返されます。前の例では、_doc タイプの product_info インデックスに 1 という名前のドキュメントが作成され、データレコードがドキュメントに挿入されます。
- 複数のドキュメントを作成する
curl -u <user>:<password> -XPOST http://es-cn-vxxxxx****.elasticsearch.aliyuncs.com:9200/_bulk -H 'Content-Type: application/json' -d' { "index" : { "_index": "product_info", "_type" : "_doc", "_id" : "1" } } {"productName":"testpro","annual_rate":"3.22%","describe":"testpro"} { "index" : { "_index": "product_info", "_type" : "_doc", "_id" : "2" } } {"productName":"testpro1","annual_rate":"3.26%","describe":"testpro"}'
コマンドが正常に実行されると、次の図に示す結果が返されます。前の例では、_doc タイプの product_info インデックスに 1 と 2 という名前のドキュメントが作成され、それぞれのドキュメントにデータレコードが挿入されます。
- 単一のドキュメントを作成する
ドキュメントの検索
curl -u <user>:<password> -XGET 'http://es-cn-vxxxxx****.elasticsearch.aliyuncs.com:9200/product_info/_doc/1?pretty'
前の例では、1 という名前のドキュメントが検索されます。
インデックスの削除
curl -u <user>:<password> -XDELETE 'http://es-cn-vxxxxx****.elasticsearch.aliyuncs.com:9200/product_info'
前の例では、product_info という名前のインデックスが削除されます。