01 ES基本操作 (检查集群的健康状态,简单的索引操作,简单的CRUD文档操作,以及判定文档是否存在)

所有的REST命令都可以在 Kibana 7.6.1的dev_tools工具上正常运行
主要内容:检查集群的健康状态,简单的索引操作,简单的CRUD文档操作,以及判定文档是否存在

1、检查ES是否启动成功
GET ?pretty
2、检查集群的健康状态
GET /_cat/health?v
GET _cluster/health
3、查看集群中有哪些索引
GET /_cat/indices?v 
4、简单的索引操作
创建索引:PUT /ecommerce?pretty
删除索引:DELETE /ecommerce?pretty
关闭索引:POST /ecommerce/_close
打开索引:POST /ecommerce/_open

在 7.0 以及之后的版本中 Type 被废弃了。一个 index 中只有一个默认的 type,即 _doc

ES 的Type 被废弃后,库表合一,Index 既可以被认为对应 MySQL 的 Database,也可以认为对应 table。

5、简单的CRUD操作
5.1 创建文档

全量替换:指定ID

  • 一般来说,是从某些其他的系统中,导入一些数据到es时,会采取这种方式
  • document是不可变的,如果要修改document的内容,第一种方式就是全量替换,直接对document重新建立索引,替换里面所有的内容
  • es会将老的document标记为deleted,然后新增我们给定的一个document,当我们创建越来越多的document的时候,es会在适当的时机在后台自动删除标记为deleted的document
PUT /index/_doc/id  ##POST方法也适用
{
  "json数据"
}

强制创建:(防止覆盖)

创建文档时,不想替换id已存在的文档,可以通过_create加以限制,如下

PUT /index/_create/id
{
  "json数据"
}

第三种格式:(自动生成ID)
需要使用POST方法,而不是PUT方法。
自动生成的id,长度为20个字符,URL安全,base64编码,GUID,分布式系统并行生成时不可能会发生冲突

POST /index/_doc
{
  "json数据"
}

创建示例01(全量替换)

PUT /ecommerce/_doc/1
{
  "name": "gaolujie yagao",
  "desc": "gaoxiao meibai",
  "price": 30,
  "producer": "gaolujie producer",
  "tags": [
    "meibai",
    "fangzhu"
  ]
}

创建示例02(强制创建)

PUT /ecommerce/_create/2
{
  "name": "jiajieshi yagao",
  "desc": "youxiao fangzhu",
  "price": 25,
  "producer": "jiajieshi producer",
  "tags": [
    "fangzhu"
  ]
}
## 该文档如果存在,添加失败。

创建示例03(自动生成ID)

POST /ecommerce/_doc
{
  "name": "zhonghua yagao",
  "desc": "caoben zhiwu",
  "price": 40,
  "producer": "zhonghua producer",
  "tags": [
    "qingxin"
  ]
}
5.2 查看文档

查看格式

GET /index/type/id

查看示例

GET /ecommerce/_doc/1

查询返回的值

{
  "_index" : "ecommerce",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 1,
  "_seq_no" : 0,
  "_primary_term" : 1,
  "found" : true,
  "_source" : {
    "name" : "gaolujie yagao",
    "desc" : "gaoxiao meibai",
    "price" : 30,
    "producer" : "gaolujie producer",
    "tags" : [
      "meibai",
      "fangzhu"
    ]
  }
}
5.3 更新文档

文档更细

更新示例(全量更新)

PUT /ecommerce/_doc/1
{
  "name": "jiaqiangban gaolujie yagao",
  "desc": "gaoxiao meibai",
  "price": 40,
  "producer": "gaolujie producer",
  "tags": [
    "meibai",
    "fangzhu"
  ]
}

再次查询,检查是否更新

# GET /index/type/id

{
  "_index" : "ecommerce",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 2,
  "_seq_no" : 2,
  "_primary_term" : 1,
  "found" : true,
  "_source" : {
    "name" : "jiaqiangban gaolujie yagao",
    "desc" : "gaoxiao meibai",
    "price" : 40,
    "producer" : "gaolujie producer",
    "tags" : [
      "meibai",
      "fangzhu"
    ]
  }
}

注意的小点

ElasticSearch实际上并没有在底层执行覆盖更新。而是先删除旧文档,再添加一条新文档。
ES也支持部分字段更新,参见ElasticSearch 7.x 实战入门07

5.4 删除文档

示例

DELETE /ecommerce/_doc/4

成功执行后的返回的结果

{
  "_index" : "ecommerce",
  "_type" : "_doc",
  "_id" : "4",
  "_version" : 2,
  "result" : "deleted",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 7,
  "_primary_term" : 1
}
6、判定文档是否存在
HEAD index/_doc/1

示例

HEAD ecommerce/_doc/1

存在的话返回 200 - OK 不存在返回 404 - Not Found

注意

type的概念已经从ElasticSearch中移除。

下一篇: 02、7种搜索方式的简单操作 https://www.jianshu.com/p/5e5cedaa1a31

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容