写点什么

一起学 Elasticsearch 系列 - 索引的 CRUD

作者:码农BookSea
  • 2023-11-07
    浙江
  • 本文字数:3004 字

    阅读完需:约 10 分钟

一起学Elasticsearch系列-索引的CRUD

本文已收录至 Github,推荐阅读 👉 Java随想录

微信公众号:Java随想录


本篇主要是介绍 Elasticsearch 中索引的基本操作 API,即增删改查(CRUD)。

创建索引

PUT /my_index?pretty
复制代码


?pretty是一个可选参数,如果加上,Elasticsearch 将返回格式化(即缩进、换行等使结果更易读)过的 JSON。


输出示例:


{  "acknowledged" : true,  "shards_acknowledged" : true,  "index" : "my_index"}
复制代码


这个输出表示索引已成功创建。"acknowledged": true 表示请求已被接受,"shards_acknowledged": true 表示所有的分片都已经准备就绪,"index": "my_index" 是你刚才创建的索引名称。

删除索引

DELETE /my_index?pretty
复制代码


假设 my_index 索引存在并已成功删除,则输出如下:


{  "acknowledged" : true}
复制代码


这个响应表示 Elasticsearch 已确认删除请求。


注意:该操作是不可逆的,一旦删除,所有存储在索引中的数据都将被永久移除,因此在执行此操作时务必谨慎

查询数据

请求:


GET /my_index/_search{  "query": {    "match": {      "field_name": "my_value"    }  }}
复制代码


在此示例中,我们在名为 my_index 的索引上进行搜索,查找字段 field_name 中值为 my_value 的文档。


响应:Elasticsearch 返回的响应包括一系列关于查询的信息,例如查询所花费的时间、是否超时、命中的文档数等。同时,返回的结果也会包括所有匹配的文档。


{  "took": 30,  "timed_out": false,  "_shards": {    "total": 5,    "successful": 5,    "skipped": 0,    "failed": 0  },  "hits": {    "total": {      "value": 1,      "relation": "eq"    },    "max_score": 1.0,    "hits": [      {        "_index": "my_index",        "_type": "_doc",        "_id": "1",        "_score": 1.0,        "_source": {          "field_name": "my_value"        }      }    ]  }}
复制代码


请注意,以上只是基本的示例,实际 ES 查询可能会复杂得多,包含过滤、聚合、排序等多种操作。


获取所有索引数据的信息


GET _cat/indices?v
复制代码


示例输出:


health status index                    uuid                   pri rep docs.count docs.deleted store.size pri.store.sizegreen  open   .kibana_task_manager_1   C9SW_Y7cQ8-TJQGArKRcDA   1   0          2            0     31.8kb         31.8kbyellow open   my_index                 7V75Rtf1QBCslQvWWPOS2A   1   1          0            0       283b           283bgreen  open   .apm-agent-configuration en6N1awvRZSLySqh0yjleA   1   0          0            0       283b           283bgreen  open   .kibana_1                9-gHntOQTCeM8RqViBAaog   1   0          8            1     19.1kb         19.1kb
复制代码


返回的结果会包含以下列:


  • health:索引的健康状态。它可以是"green"(一切正常),"yellow"(至少所有主分片都是可用的,但不是所有副本分片都可用)或者"red"(有主分片无法使用)。

  • status:索引的状态。通常情况下,可能的值是"open"或"close"。

  • index:索引的名称。

  • uuid:代表索引的唯一标识符。

  • pri:主分片的数量。

  • rep:每个主分片的副本数。

  • docs.count:存储在索引中的文档数量。

  • docs.deleted:已删除但尚未完全从存储中移除的文档数量。

  • store.size:索引当前占用的总物理存储空间。

  • pri.store.size:主分片占用的物理存储空间。


查询指定文档 id


GET /my_index/_doc/doc_id
复制代码


返回如下:


{  "_index": "my_index",  "_type": "_doc",  "_id": "1",  "_version": 3,  "_seq_no": 2,  "_primary_term": 2,  "found": true,  "_source": {    "field1": "123",    "field2": "456"  }}
复制代码


这个命令会返回一个包含以下字段的 JSON 响应:


  • _index:文档所在的索引。

  • _type:文档的类型。在 7.x 版本中,这通常是 _doc

  • _id:文档的 ID。

  • _version: 文档的版本号。每当文档更新时,此数字都会增加。

  • _seq_no:序列号,每次对文档进行操作时此数字会增加。

  • _primary_term: 主要期限数,主要用于处理并发控制。

  • found:如果找到了文档,则此值为 true;否则,为 false。

  • _source: 文档的原始内容。


如果没有找到与给定 ID 匹配的文档,Elasticsearch 会返回一个状态码为 404 的响应,并且 found 字段的值将为 false。

添加 & 更新数据

PUT /index/_doc/doc_id{ JSON数据}
//例如:PUT /my_index/_doc/1//{// "field1": "123",// "field2": "456"//}
复制代码


PUT 既可以用于添加数据,也可以用于更新数据,比如我想更新文档 1 的 name 字段为:小明,可以这么写:


PUT /my_index/_doc/1{"name": "小明"}
复制代码


注意:PUT 既可以用于插入,也可以用于更新,所以 PUT 的更新是全量更新,而不是部分更新。也就是上面的语句执行之后,文档会被直接替换,只会有 name 字段,字段值为小明


如果我们只想部分更新文档中的字段,可以使用 POST,示例如下:


POST /index/_update/1{  "doc": {    "name": "小明"  }}
复制代码


这个命令只会更新文档中的 name 字段为小明。其他字段还是保留原样。

cat 命令

cat 命令在 ES 中会经常使用,下面介绍 cat 命令中常用的几个命令。

参数

cat 命令组成形式是:GET /_cat/indices?format=json&pretty?之前是命令,之后是参数,多个参数用&分隔。


参数有下:


//v 显示更加详细的信息GET /_cat/master?v//help 显示命令结果字段说明GET /_cat/master?help//h 显示命令结果想要展示的字段GET /_cat/master?h=ip,nodeGET /_cat/master?h=i*,node//format 显示命令结果展示格式,支持格式类型:text json smile yaml cborGET /_cat/indices?format=json&pretty//s 显示命令结果按照指定字段排序GET _cat/indices?v&s=index:desc,docs.count:desc
复制代码

常用命令

aliases :显示别名


GET /_cat/aliases
复制代码


获取所有索引别名,如果想获得某个索引的别名可以使用:GET index/alias


allocation :显示每个节点的分片数和磁盘使用情况


GET /_cat/allocation
复制代码


count :显示整个集群或者索引的文档个数


GET /_cat/countGET /_cat/count/index
复制代码


fielddata :显示每个节点字段所占的堆空间


GET /_cat/fielddataGET /_cat/fielddata?fields=name,addr
复制代码


health :显示集群是否健康


GET /_cat/health
复制代码


indices :显示索引的情况


GET /_cat/indicesGET /_cat/indices/index
复制代码


master: 显示 master 节点信息


GET /_cat/master
复制代码


nodes :显示所有 node 节点信息


GET /_cat/nodes
复制代码


recovery :显示索引恢复情况


当索引迁移的任何时候都可能会出现恢复情况,例如,快照恢复、复制更改、节点故障或节点启动期间。


GET /_cat/recovery
复制代码


thread_pool :显示每个节点线程运行情况


GET /_cat/thread_poolGET /_cat/thread_pool/bulkGET /_cat/thread_pool/bulk?h=id,name,active,rejected,completed
复制代码


shards :显示每个索引各个分片的情况


展示索引的各个分片,主副分片,文档个数,所属节点,占存储空间大小等信息。


GET /_cat/shardsGET /_cat/shards/indexGET _cat/shards?h=index,shard,prirep,state,unassigned.reason
复制代码


分片的状态:INITIALIZING初始化;STARTED分配完成;UNASSIGNED不能分配;可以通过unassigned.reason属性查看不能分配的原因。


segments :显示每个 segment 的情况


包括属于索引,节点,主副,文档数等


GET /_cat/segmentsGET /_cat/segments/index
复制代码


templates :显示每个 template 的情况


GET /_cat/templatesGET /_cat/templates/mytempla*
复制代码


发布于: 刚刚阅读数: 6
用户头像

码农BookSea

关注

Java开发工程师 2021-12-26 加入

Java开发菜鸟工程师,写博客的初衷是为了沉淀我所学习,累积我所见闻,分享我所体验。希望和更多的人交流学习。

评论

发布
暂无评论
一起学Elasticsearch系列-索引的CRUD_Java_码农BookSea_InfoQ写作社区