Elasticsearch API 使い方まとめ

Elasticsearch

curl で API を叩いて Elasticsearch を操作する方法をまとめました。

スポンサーリンク

インデックス管理

インデックス作成

$ curl -XPUT "http://localhost:9200/sample_index?pretty"

インデックス確認

$ curl -XGET "http://localhost:9200/_aliases?pretty"

インデックス削除

$ curl -XDELETE "http://localhost:9200/sample_index?pretty"

インデックスを Close

  • 辞書を更新する際に使用します。
$ curl -XPOST "http://localhost:9200/sample_index/_close?pretty"

インデックスを Open

  • 辞書を更新する際に使用します。
$ curl -XPOST "http://localhost:9200/sample_index/_open?pretty"

ドキュメント管理

ドキュメント登録

# id を指定する場合
$ curl -XPUT "http://localhost:9200/sample_index/_doc/1?pretty" -H "Content-Type: application/json" -d '
{
  "name":"テストドキュメント",
  "created_at":"2021-06-01 10:00:00"
}'
# id を指定しない場合
$ curl -XPOST "http://localhost:9200/sample_index/_doc/?pretty" -H "Content-Type: application/json" -d '
{
  "name":"テストドキュメント",
  "created_at":"2021-06-01 10:00:00"
}'

ドキュメント取得

$ curl -XGET "http://localhost:9200/sample_index/_doc/1?pretty"
{
  "_index" : "sample_index",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 1,
  "_seq_no" : 0,
  "_primary_term" : 1,
  "found" : true,
  "_source" : {
    "name" : "テストドキュメント",
    "created_at" : "2021-06-01 10:00:00"
  }
}

ドキュメント更新

$ curl -XGET "http://localhost:9200/sample_index/_doc/1?pretty"
{
  "_index" : "sample_index",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 1,
  "_seq_no" : 0,
  "_primary_term" : 1,
  "found" : true,
  "_source" : {
    "name" : "テストドキュメント",
    "created_at" : "2021-06-01 10:00:00"
  }
}
$ curl -XPOST "http://localhost:9200/sample_index/_doc/1?pretty" -H "Content-Type: application/json" -d '
{
  "name":"テストドキュメント_更新",
  "created_at":"2021-06-01 10:00:00"
}'
$ curl -XGET "http://localhost:9200/sample_index/_doc/1?pretty"
{
  "_index" : "sample_index",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 2,
  "_seq_no" : 1,
  "_primary_term" : 1,
  "found" : true,
  "_source" : {
    "name" : "テストドキュメント_更新",
    "created_at" : "2021-06-01 10:00:00"
  }
}

ドキュメント削除

$ curl -XDELETE "http://localhost:9200/sample_index/_doc/1?pretty"
$ curl -XGET "http://localhost:9200/sample_index/_doc/1?pretty"
{
  "_index" : "sample_index",
  "_type" : "_doc",
  "_id" : "1",
  "found" : false
}

Bulk API

データを一括で登録することが出来ます。

bulk.ndjson

  • ndjson(Newline Delimited JSON)
  • 1行ずつ JSON を改行で区切る形式です。
{ "index": {"_id": "1"} }
{ "name" : "テストドキュメント", "created_at" : "2021-06-01 10:00:00" }
{ "index": {"_id": "2"} }
{ "name" : "テストdocument", "created_at" : "2021-06-02 10:00:00" }
{ "index": {"_id": "3"} }
{ "name" : "テストどきゅめんと", "created_at" : "2021-06-03 10:00:00" }
  • id を指定しない場合は以下のようになります。
{ "index": {} }
{ "name" : "テストドキュメント", "created_at" : "2021-06-01 10:00:00" }
{ "index": {} }
{ "name" : "テストdocument", "created_at" : "2021-06-02 10:00:00" }
{ "index": {} }
{ "name" : "テストどきゅめんと", "created_at" : "2021-06-03 10:00:00" }
$ curl -H "Content-Type: application/json" -X POST http://localhost:9200/sample_index/_bulk?pretty --data-binary @bulk.ndjson

検索

全件検索

$ curl -XGET "http://localhost:9200/sample_index/_search?pretty"
{
  "took" : 0,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 3,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "sample_index",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 1.0,
        "_source" : {
          "name" : "テストドキュメント",
          "created_at" : "2021-06-01 10:00:00"
        }
      },
      {
        "_index" : "sample_index",
        "_type" : "_doc",
        "_id" : "2",
        "_score" : 1.0,
        "_source" : {
          "name" : "テストdocument",
          "created_at" : "2021-06-02 10:00:00"
        }
      },
      {
        "_index" : "sample_index",
        "_type" : "_doc",
        "_id" : "3",
        "_score" : 1.0,
        "_source" : {
          "name" : "テストどきゅめんと",
          "created_at" : "2021-06-03 10:00:00"
        }
      }
    ]
  }
}

match

$ curl -XGET "http://localhost:9200/sample_index/_search?pretty" -H "Content-Type: application/json" -d '
{
  "query": {
    "match": {
      "name": "document"
    }
  }
}'
{
  "took" : 11,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 1,
      "relation" : "eq"
    },
    "max_score" : 1.1727306,
    "hits" : [
      {
        "_index" : "sample_index",
        "_type" : "_doc",
        "_id" : "2",
        "_score" : 1.1727306,
        "_source" : {
          "name" : "テストdocument",
          "created_at" : "2021-06-02 10:00:00"
        }
      }
    ]
  }
}
$ curl -XGET "http://localhost:9200/sample_index/_search?pretty" -H "Content-Type: application/json" -d '
{
  "query": {
    "match": {
      "name": {
        "query": "document どきゅめんと",
        "operator": "OR"
      }
    }
  }
}'
{
  "took" : 5,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 2,
      "relation" : "eq"
    },
    "max_score" : 4.058604,
    "hits" : [
      {
        "_index" : "sample_index",
        "_type" : "_doc",
        "_id" : "3",
        "_score" : 4.058604,
        "_source" : {
          "name" : "テストどきゅめんと",
          "created_at" : "2021-06-03 10:00:00"
        }
      },
      {
        "_index" : "sample_index",
        "_type" : "_doc",
        "_id" : "2",
        "_score" : 1.1727306,
        "_source" : {
          "name" : "テストdocument",
          "created_at" : "2021-06-02 10:00:00"
        }
      }
    ]
  }
}

Analyze APi

  • 指定した Analyzer で文字列がどのように分割されるかを見ることが出来ます。
$ curl -XGET http://loalhost:9200/sample_index/_analyze?pretty -H "Content-Type: application/json" -d '
{
  "analyzer": "ja_kuromoji_search_analyzer", 
  "text": "テストドキュメント"
}'
タイトルとURLをコピーしました