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": "テストドキュメント"
}'