文章摘要
说明
- 环境:Linux虚拟机 + Elasticsearch 7.3.0 容器化伪集群 + Kibana 7.3.0 容器化(非必须)
- 环境准备:待更新
- 备注:这篇文章简单的介绍了如何与Elasticsearch进行交互,对于初学者来说,能对Elasticsearch的交互有一个简单的认知。以下命令都测试通过,一开始使用的Elasticsearch 6.8.2版本,但是由于执行命令10时,出现错误,故切换至当时最新版7.3.0,而后测试通过。以下命令可以在Linux虚拟机下直接执行,也可以在Kibana的Dev Tools > Console中执行。
1.健康检查
curl -X GET "192.168.2.253:9200/_cat/health?v&pretty"
2.获取集群节点信息
curl -X GET "192.168.2.253:9200/_cat/nodes?v&pretty"
3.获取集群索引信息
curl -X GET "192.168.2.253:9200/_cat/indices?v&pretty"
4.创建索引
curl -X PUT "192.168.2.253:9200/customer?pretty&pretty"
5.在指定索引下创建文件
curl -X PUT "192.168.2.253:9200/customer/_doc/1?pretty&pretty" -H 'Content-Type: application/json' -d'
{
"name": "John Doe"
}
'
6.获取指定索引下的指定文件
curl -X GET "192.168.2.253:9200/customer/_doc/1?pretty&pretty"
7.删除一个索引
curl -X DELETE "192.168.2.253:9200/customer?pretty&pretty"
- 通过以上命令,对于如何处理Elasticsearch的数据,可以用以下模式来概括:
<HTTP Verb> /<Index>/<Endpoint>/<ID>
8.覆盖更新文件内容
更改上面命令6的name, 由 “John Doe” 变成 “Jane Doe”
curl -X PUT "192.168.2.253:9200/customer/_doc/1?pretty&pretty" -H 'Content-Type: application/json' -d'
{
"name": "Jane Doe"
}
'
9.省略Id创建
- 说明:在创建索引文件时,部分是可以省略的,当省略id时,ES会为我们随机生成一个ID
curl -X POST "192.168.2.253:9200/customer/_doc?pretty&pretty" -H 'Content-Type: application/json' -d'
{
"name": "Jane Doe"
}
'
结果类似这样 _id:
{
"_index" : "customer",
"_type" : "_doc",
"_id" : "A2Tkf2wBNvZJIyVDCwq2",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 2,
"_primary_term" : 1
}
10.指定更新
版本一:更新指定字段
curl -X POST "192.168.2.253:9200/customer/_update/1?pretty&pretty" -H 'Content-Type: application/json' -d'
{
"doc": { "name": "Jane Doe" }
}
'
版本二:更新指定字段,并新增一个字段
curl -X POST "192.168.2.253:9200/customer/_update/1?pretty&pretty" -H 'Content-Type: application/json' -d'
{
"doc": { "name": "Jane Doe", "age": 20 }
}
'
版本三:更新操作支持简单的脚本,下面的命令将给年龄增加5
curl -X POST "192.168.2.253:9200/customer/_update/1?pretty&pretty" -H 'Content-Type: application/json' -d'
{
"script" : "ctx._source.age += 5"
}
'
11.删除文件
curl -X DELETE "192.168.2.253:9200/customer/_doc/2?pretty&pretty"
12.批量操作
- 示例一:新增id=1和id=2的两条数据(具体是更新操作,还是插入操作,视情况而定)
curl -X POST "192.168.2.253:9200/customer/_bulk?pretty&pretty" -H 'Content-Type: application/json' -d'
{"index":{"_id":"1"}}
{"name": "John Doe" }
{"index":{"_id":"2"}}
{"name": "Jane Doe" }
'
结果:
{
"took" : 9,
"errors" : false,
"items" : [
{
"index" : {
"_index" : "customer",
"_type" : "_doc",
"_id" : "1",
"_version" : 8,
"result" : "updated",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 13,
"_primary_term" : 1,
"status" : 200
}
},
{
"index" : {
"_index" : "customer",
"_type" : "_doc",
"_id" : "2",
"_version" : 4,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 14,
"_primary_term" : 1,
"status" : 201
}
}
]
}
说明:由结果可以看出,由于id=1的数据已经存在,则执行的是更新操作result:updated,id=2的数据不存在则执行新增操作result:created。
- 示例二:一个更新,一个删除
curl -X POST "192.168.2.253:9200/customer/_bulk?pretty&pretty" -H 'Content-Type: application/json' -d'
{"update":{"_id":"1"}}
{"doc": { "name": "John Doe becomes Jane Doe" } }
{"delete":{"_id":"2"}}
'