为了账号安全,请及时绑定邮箱和手机立即绑定

Elasticsearch の 教你学会基础API

标签:
API

elasticsearch

elasticsearch

集群健康

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_percent1535619893 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.sizeyellow open   weather NjoTuy-yTzihSe4UKq81Ug   5   1          0            0      1.2kb          1.2kbyellow 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.sizeyellow open   weather NjoTuy-yTzihSe4UKq81Ug   5   1          0            0      1.2kb          1.2kbyellow open   blog    EsUfJEW2TF2RySj8Rdq8jw   5   1          0            0       460b           460byellow 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"
}'



作者:Kooola大数据
链接:https://www.jianshu.com/p/9ca1a608655c


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消