[随時更新] ElasticSearchの基本APIのまとめ

執筆日:

更新日:

こんにちは。もーすけです。
ElasticSearchを使っているのですがいつもAPI操作を忘れてしまうので、基本的な操作をまとめました。
参考につかってください。

そもそものElasticSearchやKibanaのインストールなどについては下記をご覧ください。

全般

ユーザ名とパスワードをつけてAPIを実行する

curlでのベーシック認証です。デフォルトでは、ユーザ名elastic、パスワードpasswordとついていて使うことが多い。

$ curl  -u elastic:password -XGET 'localhost:9200/_cat/indices?v'

レスポンス結果を見やすくする

GETパラメータにprettyをつける。以下で違いを見てみる。

$ curl -XPUT 'localhost:9200/blog'
{"acknowledged":true,"shards_acknowledged":true,"index":"blog"

$ curl -XPUT 'localhost:9200/blog?pretty'
{
  "acknowledged" : true,
  "shards_acknowledged" : true,
  "index" : "blog"
}

インデックス、ドキュメント関連

インデックスの一覧を確認する

作成したインデックスを確認する。indexは複数形になるとindicesになるので注意。

$ curl 'localhost:9200/_cat/indices?v'
status index   uuid                   pri rep docs.count docs.deleted store.size pri.store.size
yellow open   blog    rwvaOBVcRaSLqt3NDRFZ-w   5   1          0            0       324b           324b

ちなみに_catで出力できるものはこちらで確認できる。

$ curl -X GET 'localhost:9200/_cat'
=^.^=
/_cat/allocation
/_cat/shards
/_cat/shards/{index}
/_cat/master
/_cat/nodes
/_cat/tasks
/_cat/indices
/_cat/indices/{index}
/_cat/segments
/_cat/segments/{index}
/_cat/count
/_cat/count/{index}
/_cat/recovery
/_cat/recovery/{index}
/_cat/health
/_cat/pending_tasks
/_cat/aliases
/_cat/aliases/{alias}
/_cat/thread_pool
/_cat/thread_pool/{thread_pools}
/_cat/plugins
/_cat/fielddata
/_cat/fielddata/{fields}
/_cat/nodeattrs
/_cat/repositories
/_cat/snapshots/{repository}
/_cat/templates

インデックスを作成する

blogという名前のインデックスを作成。MethodがPUTであることに注意。

$ curl -XPUT 'localhost:9200/blog'

インデックスの削除をする

blogという名前のインデックスを削除する。

$ curl -XDELETE localhost:9200/blog

インデックスのマッピングを確認する

インデックスのマッピングを確認する。

// インデックス全体
$ curl -XGET localhost:9200/blog/_mapping?pretty
true
{
  "blog" : {
    "mappings" : {
      "user" : {
        "properties" : {
          "image_url" : {
            "type" : "text",
            "index" : false
          },
          "last_login_at" : {
            "type" : "date",
            "fields" : {
              "keyword" : {
                "type" : "keyword",
                "ignore_above" : 256
              }
            },
(略)
// 特定のタイプのみ
$ curl -XGET localhost:9200/blog/user/_mapping?pretty

バルクインサート

データをバルクインサートする。バルクインサートするデータのサンプルフォーマットはこちら。

$ cat sample-data.json
{ "index" : {} }
{"date" : "2017-08-13 10:00:00","title" : "ElasticSearch入門","body" : "ブログ記事の全文検索などをやりたくて、ElasticSearchはどんなもんじゃろか?と触ってみたのでメモ。ElasticSearchの入門についてはたくさんの記事がすでにでているので、ほぼ自分の理解のために残します。", "tag": ["ElasticSearch", "入門"]}
{ "index" : {} }
{"date" : "2017-08-14 22:00:00","title" : "ElasticSearch実践","body" : "ElasticSearchを利用した実践的な検索方法などについて開設します。また、クラスターの組み方なども解説。","tag": ["ElasticSearch", "実践", "検索"]}
{ "index" : {} }
{"date" : "2017-08-12 11:00:00","title" : "Hugoサマリー機能","body" : "今まで、ブログのトップページは最新の数記事の記事全文を掲載していました。  そのため、当然ながら記事内の画像や埋め込みの動画などすべて表示されるので、トップページの表示速度はとても遅くなります。  そこで、サマリーだけを表示しようとHugoの`{{ .Summary }}`を利用しようとしたのですが、とても長いサマリーが出てきてなぜかと困っていました。","tag": ["Hugo", "ブログ"]}
{ "index" : {} }
{"date" : "2017-08-04 11:00:00","title" : "英語でAWSソリューションアーキテクト認定の模擬試験を受けてみた","body" : "英語でAWSソリューションアーキテクト認定の模擬試験を受けてみたので報告。AWS認定試験ってどんなものか、英語の試験ってどんなものか、どんな学習をしたか、あたりの参考にしてください。","tag": ["英語", "AWS"]}
{ "index" : {} }
{"date" : "2017-07-14 20:00:00","title" : "Terraform×Rancherでマルチクラウドを一歩すすめる、を話してきた","body" : "TerraformとRancherを使って、マルチクラウドを環境の考え方についてはなしてきました。マルチクラウドのメリットや他のサービスとどう組み合わせていくか話しました。","tag": ["Terraform", "Rancher", "マルチクラウド"]}

// バルクインサート
$ curl -H "Content-Type: application/json" -XPOST 'localhost:9200/blog/post/_bulk?pretty&refresh' --data-binary @sample-data.json

マッピング

マッピングを定義ファイルから設定する。

$ cat user.json
{
  "properties" : {
    "last_login_at" : {
      "type" : "date",
      "format": "yyyy-MM-dd HH:mm:ss",
      "fields" : {
        "keyword" : {
          "type" : "keyword",
          "ignore_above" : 256
        }
      }
    },
    "user_name" : {
      "type" : "text",
      "fields" : {
        "keyword" : {
          "type" : "keyword",
          "ignore_above" : 256
        }
      }
    },
    "image_url" : {
      "type" : "text",
      "index": false
      }
    }
  }
}

$ curl -XPUT 'localhost:9200/blog/_mapping/user?pretty' -d @user.json

ドキュメントを削除する

$ curl -XDELETE localhost:9200/blog/user/123456
($ curl -XDELETE localhost:9200/:index/:type/:id)

検索関連

基本検索

//"ElasticSearch 入門"というキーワードで検索
$ curl 'localhost:9200/blog/_search?pretty' -d '
{
  "query": { "match": { "body": "ElasticSearch 入門" } }
}'
記事の内容に関連した相談、仕事依頼したい New

記事の内容やクラウドネイティブ技術に関する相談、仕事依頼を開始しました。
仕事依頼、相談をしてみる

フィードバック

本記事に対して、フィードバックあればこちらのフォームからご記入ください。
記事の内容にフィードバックしてみる

このエントリーをはてなブックマークに追加