集群健康
curl localhost:9200/_cat/health?v
epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1535619893 17:04:53 elasticsearch yellow 1 1 10 10 0 0 10 0 - 50.0%
可以看到:
1、集群名称为默认的"elasticsearch"
2、集群状态为"yellow",总共有三种状态:"green","yellow","red"
列出所有索引
curl 'localhost:9200/_cat/indices?v'
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
yellow open weather NjoTuy-yTzihSe4UKq81Ug 5 1 0 0 1.2kb 1.2kb
yellow open cbm PFM_LEfKRbyhhpGjUex0Fg 5 1 20 0 97.6kb 97.6kb
可以看到:
1、集群中已经有两个索引,分别是:weather和cbm。
2、每个索引有5个主分片和一个复制(默认)。
3、其中cbm的索引下又20个文档。
创建一个索引
curl -XPUT 'localhost:9200/blog?pretty'
然后列出所有索引,就会发现索引已经创建好
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
yellow open weather NjoTuy-yTzihSe4UKq81Ug 5 1 0 0 1.2kb 1.2kb
yellow open blog EsUfJEW2TF2RySj8Rdq8jw 5 1 0 0 460b 460b
yellow open cbm PFM_LEfKRbyhhpGjUex0Fg 5 1 20 0 97.6kb 97.6kb
创建文档
curl -XPUT 'localhost:9200/blog/user/2?pretty' -d '
{
"name": "march"
}'
{
"error" : "Content-Type header [application/x-www-form-urlencoded] is not supported",
"status" : 406
}
Starting from Elasticsearch 6.0, all REST requests that include a body must also provide the correct content-type for that body.
自6.0版本之后需要做content-type检查(如果不加就会报以上406错误),所以请求是加上content-type,修改请求如下:
curl -XPUT -H "Content-Type: application/json" 'localhost:9200/blog/user/2?pretty' -d '
{
"name": "march kooola"
}'
请求返回如下:
{
"_index" : "blog",
"_type" : "user",
"_id" : "2",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 0,
"_primary_term" : 1
}
解释下这个"localhost:9200/blog/user/2?pretty" :
1、blog为索引(index)
2、user为类型(type)
3、数字2表示文档的id,这里指定了该文档的id为2
4、请求返回中可以看到,版本号为1,result为新建(create)
接下来再把刚才的请求重新请求,修改下name
curl -XPUT -H "Content-Type: application/json" 'localhost:9200/blog/user/2?pretty' -d '
{
"name": "ZWQ"
}'
可以看到请求返回如下:
{
"_index" : "blog",
"_type" : "user",
"_id" : "2",
"_version" : 2,
"result" : "updated",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 1,
"_primary_term" : 1
}
id还是2,版本号变成2,result类型变成更新(update)
在索引的时候,ID部分是可选的。如果不指定,Elasticsearch将产生一个随机的ID来索引这个文档。Elasticsearch 生成的ID会作为索引API调用的一部分被返回。
查询一个文档
curl -XGET 'localhost:9200/blog/user/2?pretty'
该请求查询索引为blog,类型为user,文档id为2的文档
请求返回如下:
{
"_index" : "blog",
"_type" : "user",
"_id" : "2",
"_version" : 2,
"found" : true,
"_source" : {
"name" : "ZWQ"
}
}
可以看到,查询到的文档name为ZWQ(更新后的值)
删除文档
curl -XDELETE 'localhost:9200/blog/user/2?pretty'
以上命令删除索引为blog,类型为user,文档id为2的文档
此时再查询该文档,返回就会告诉我们该文档找不到(found为false)
curl -XGET 'localhost:9200/blog/user/2?pretty'
{
"_index" : "blog",
"_type" : "user",
"_id" : "2",
"found" : false
}
更新文档
除了可以索引、替换文档之外,我们也可以更新一个文档。但要注意,Elasticsearch底层并不支持原地更新。在我们想要做一次更新的时候,Elasticsearch先删除旧文档,然后再索引更新的新文档。
下面的例子展示了怎样将ID为2的文档的name字段改成“zhangweiqing”:
curl -XPOST -H "Content-Type: application/json" 'localhost:9200/blog/user/2/_update?pretty' -d '
{
"doc": { "name": "zhangweiqing" }
}'
下面的例子展示了怎样将ID为2的文档的name字段改成“mouse”的同时,给它加上age字段:
curl -XPOST -H "Content-Type: application/json" 'localhost:9200/blog/user/2/_update?pretty' -d '
{
"doc": { "name": "mouse", "age": 28 }
}'
更新也可以通过使用简单的脚本来进行。这个例子使用一个脚本将age加1(ctx._source指向当前被更新的文档):
curl -XPOST -H "Content-Type: application/json" 'localhost:9200/blog/user/2/_update?pretty' -d '
{
"script" : "ctx._source.age += 1"
}'
网友评论