2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Elasticsearch入門】速習Elasticsearch CRUD編

Last updated at Posted at 2020-07-21

ゴール

本記事ではElasticsearchの以下の基本操作の中のCRUDを簡単に紹介します

  • CRUD
  • Search
    • query
    • aggregation

Elasticsearch

Elasticsearch は オープンソースの全文検索エンジンです。
Apache LuceneをベースとしたJavaで書かれたソフトウェアでElastic社により開発が進められています。
登録したドキュメントから目的の単語を含むドキュメントを高速に検索することができます。
基本的にElasticsearchではRestful APIを使って操作します。

バージョン等

Elasticsearch: 7.6.2
kibana: 7.6.2
※ 簡単にCRUD操作を行うためにKibanaのDevToolsを使用します。

環境準備

環境に関しては以下の投稿に記載の通りで用意しています。
【Elasticsearch入門】環境構築
【Elasticsearch入門】環境構築 Windows編

早速触ります

CRUD

ドキュメントの作成、取得、更新、削除について紹介します。

Create

1. IDを指定してドキュメントを作成する

PUT /{index}/_doc/{Document ID} 
{
  "key1": "value1",
  "key2": {
    "key2-1": "value2-1",
    "key2-2": "value2-2",
  }
}


リクエスト

PUT my_index/_doc/1
{
  "name": "elasticsearch",
  "message": "hello world",
  "price": 100
}

レスポンス

{
  "_index" : "my_index",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 0,
  "_primary_term" : 1
}

レスポンスの結果より、"_id" : "1"のドキュメントが作成されたことがわかります。
このようにIDを指定してドキュメントを作成したい場合にPUTを使用します。

2. IDを指定してせずにドキュメントを作成する

POST /{index}/_doc
{
  "key1": "value1",
  "key2": {
    "key2-1": "value2-1",
    "key2-2": "value2-2",
  }
}


リクエスト

POST my_index/_doc
{
  "name": "kibana",
  "message": "hello world",
  "price": 100
}

レスポンス

{
  "_index" : "my_index",
  "_type" : "_doc",
  "_id" : "oJ3HcXMBFnhBnJdYQvy1",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 1,
  "_primary_term" : 1
}

レスポンスの結果より、"_id" : "oJ3HcXMBFnhBnJdYQvy1"のドキュメントが作成されたことがわかります。
このようにIDを指定せずにドキュメントを作成したい場合にPOSTを使用して自動的にIDが付与されるようにリクエストを投げることができます。

Read

IDを指定してドキュメントを取得する

GET /{index}/_doc/{Document ID}


リクエスト

GET my_index/_doc/1

レスポンス

{
  "_index" : "my_index",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 1,
  "_seq_no" : 0,
  "_primary_term" : 1,
  "found" : true,
  "_source" : {
    "name" : "elasticsearch",
    "message" : "hello world",
    "price" : 100
  }
}

レスポンスの結果より、"_id" : "1"のドキュメントが取得されたことがわかります。
また、"_source"の中身をみることで実際のドキュメントの中身をみることもできます。

Update

1. ドキュメントの更新

PUT /{index}/_doc/{Document ID} 
{
  "key1": "value1",
  "key2": {
    "key2-1": "value2-1",
    "key2-2": "value2-2",
  }
}


リクエスト

PUT my_index/_doc/1
{
  "name": "elasticsearch2",
  "message": "hello world2",
  "price": 200
}

レスポンス

{
  "_index" : "my_index",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 2,
  "result" : "updated",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 1,
  "_primary_term" : 1
}

レスポンスの結果をみると"_version" : 2の表記により、"_id" : "1"のドキュメントが更新されたことがわかります。
また、GET my_index/_doc/1により実際のドキュメントを確認できます。

{
  "_index" : "my_index",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 2,
  "_seq_no" : 1,
  "_primary_term" : 1,
  "found" : true,
  "_source" : {
    "name" : "elasticsearch2",
    "message" : "hello world2",
    "price" : 200
  }
}

2. ドキュメントを部分的に更新する

PUTを用いることでドキュメントそのものを更新することができますが、特定のフィールドを部分的に更新することもできます。

POST /{index}/_update/{Document ID} 
{
  "doc": {
    "key1": "value1",
    "key2": {
      "key2-1": "value2-1",
      "key2-2": "value2-2",
    }
  }
}


リクエスト

POST my_index/_update/1
{
  "doc": {
     "price": 500
  }
}

レスポンス

{
  "_index" : "my_index",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 3,
  "result" : "updated",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 2,
  "_primary_term" : 1
}

レスポンスの結果をみると"_version" : 3の表記により、"_id" : "1"のドキュメントが更新されたことがわかります。
また、GET my_index/_doc/1により実際のドキュメントを確認できます。

{
  "_index" : "my_index",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 3,
  "_seq_no" : 2,
  "_primary_term" : 1,
  "found" : true,
  "_source" : {
    "name" : "elasticsearch2",
    "message" : "hello world2",
    "price" : 500
  }
}

"price" : 500のみが更新されたことがわかるかと思います。

Delete

以下のリクエストで削除を行うことができます。

DELETE {index}


リクエスト

DELETE my_index

レスポンス

{
  "acknowledged" : true
}

おすすめ教材

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?