一起学Elasticsearch系列-索引的CRUD

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

微信公众号:Java随想录

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

创建索引

JSON 复制代码
PUT /my_index?pretty

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

输出示例:

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

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

删除索引

JSON 复制代码
DELETE /my_index?pretty

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

json 复制代码
{
  "acknowledged" : true
}

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

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

查询数据

请求:

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

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

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

json 复制代码
{
  "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查询可能会复杂得多,包含过滤、聚合、排序等多种操作。

获取所有索引数据的信息

JSON 复制代码
GET _cat/indices?v

示例输出:

arduino 复制代码
health status index                    uuid                   pri rep docs.count docs.deleted store.size pri.store.size
green  open   .kibana_task_manager_1   C9SW_Y7cQ8-TJQGArKRcDA   1   0          2            0     31.8kb         31.8kb
yellow open   my_index                 7V75Rtf1QBCslQvWWPOS2A   1   1          0            0       283b           283b
green  open   .apm-agent-configuration en6N1awvRZSLySqh0yjleA   1   0          0            0       283b           283b
green  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

JSON 复制代码
GET /my_index/_doc/doc_id

返回如下:

json 复制代码
{
	"_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。

添加 & 更新数据

JSON 复制代码
PUT /index/_doc/doc_id
{
 JSON数据
}

//例如:PUT /my_index/_doc/1
//{
//  "field1": "123",
//  "field2": "456"
//}

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

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

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

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

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

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

cat命令

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

参数

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

参数有下:

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

常用命令

aliases :显示别名

JSON 复制代码
GET /_cat/aliases

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

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

JSON 复制代码
GET /_cat/allocation

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

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

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

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

health :显示集群是否健康

JSON 复制代码
GET /_cat/health

indices :显示索引的情况

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

master: 显示master节点信息

JSON 复制代码
GET /_cat/master

nodes :显示所有node节点信息

JSON 复制代码
GET /_cat/nodes

recovery :显示索引恢复情况

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

JSON 复制代码
GET /_cat/recovery

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

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

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

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

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

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

segments :显示每个segment的情况

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

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

templates :显示每个template的情况

JSON 复制代码
GET /_cat/templates
GET /_cat/templates/mytempla*
相关推荐
新加坡内哥谈技术几秒前
微软AI核电计划
大数据·人工智能·语言模型·自然语言处理
蓝染-惣右介16 分钟前
【若依RuoYi-Vue | 项目实战】帝可得后台管理系统(二)
java·前端·后端·vue·springboot
齐 飞20 分钟前
Java接口和抽象类的区别
java·笔记·后端
打鱼又晒网27 分钟前
你了解system V的ipc底层如何设计的吗?消息队列互相通信的原理是什么呢?是否经常将信号量和信号混淆呢?——问题详解
linux·运维·服务器·后端·操作系统
(⊙o⊙)~哦36 分钟前
spring boot 定时器配置
java·spring boot·后端
C—328G1 小时前
flask
后端·python·flask
闲人编程1 小时前
Elasticsearch 单机和集群环境部署教程
python·elasticsearch·部署·集群·单机
檀越剑指大厂2 小时前
【Elasticsearch系列十九】评分机制详解
大数据·elasticsearch·搜索引擎
武子康2 小时前
大数据-141 - ClickHouse 集群 副本和分片 Zk 的配置 Replicated MergeTree原理详解
java·大数据·clickhouse·flink·spark·scala
Hello.Reader2 小时前
深入解析 Apache Doris架构、应用场景与最佳实践
大数据·架构·数据分析·apache