本文整理 Elasticsearch 7.x 核心操作命令,涵盖集群管理、索引操作、文档 CRUD、查询聚合、运维监控等高频场景,复制即可使用!
一、基础环境与连接说明
1. 核心前提
-
ES 7.x 默认端口:9200(REST API)、9300(节点间通信)
-
命令格式:基于 RESTful API,支持 GET/PUT/POST/DELETE 方法
-
测试工具:Postman、curl 命令行、Kibana Dev Tools
2. 集群连接测试
# 基础连接(返回集群基本信息)
GET /
# 带认证的连接(若开启 security 插件)
GET / -u username:password
# 响应示例(健康状态为 green 表示正常)
{
"name" : "node-1",
"cluster_name" : "elasticsearch",
"version" : {
"number" : "7.17.0",
"build_flavor" : "default",
"build_type" : "tar"
},
"tagline" : "You Know, for Search"
}
二、集群管理命令
1. 集群健康状态
# 基础健康检查(green/yellow/red)
GET /_cluster/health
# 等待集群状态就绪(超时 50s,常用于脚本启动检测)
GET /_cluster/health?wait_for_status=yellow&timeout=50s
# 查看详细健康信息(含分片状态)
GET /_cluster/health?level=shards
2. 节点与分片管理
# 查看所有节点
GET /_cat/nodes?v
# 查看主节点
GET /_cat/master?v
# 查看所有索引的分片分布
GET /_cat/shards?v
# 查看集群任务(如索引创建、分片迁移)
GET /_tasks
GET /_cluster/pending_tasks # 待处理任务
3. 集群统计信息
# 集群整体统计(节点数、索引数、存储占用等)
GET /_cluster/stats
# 节点详细统计(CPU、内存、磁盘使用)
GET /_nodes/stats
三、索引操作命令
1. 索引创建
# 1. 基础创建(默认分片配置)
PUT /my_index
# 2. 自定义分片与映射
PUT /blog
{
"settings": {
"number_of_shards": 3, # 主分片数(7.x 默认 1,生产建议 3-5)
"number_of_replicas": 1 # 副本分片数(高可用必备)
},
"mappings": {
"properties": {
"title": { "type": "text" }, # 文本类型(支持分词搜索)
"author": { "type": "keyword" }, # 关键字类型(精确匹配)
"content": { "type": "text" },
"publish_time": { "type": "date" } # 日期类型
}
}
}
2. 索引查询与删除
# 查看单个索引信息
GET /blog
# 查看所有索引
GET /_cat/indices?v
# 模糊查询索引(如查看所有 blog 开头的索引)
GET /_cat/indices/blog*?v
# 删除索引
DELETE /my_index
DELETE /blog* # 批量删除(支持通配符)
3. 索引映射管理
# 查看索引映射
GET /blog/_mapping
# 添加新字段映射(7.x 支持动态添加)
PUT /blog/_mapping
{
"properties": {
"tags": { "type": "keyword" } # 新增标签字段
}
}
# 关闭索引(禁止读写,保留数据)
POST /blog/_close
# 打开索引
POST /blog/_open
四、文档 CRUD 命令
1. 文档创建(新增数据)
# 1. 指定文档 ID
PUT /blog/_doc/1
{
"title": "Elasticsearch 7.x 命令详解",
"author": "张三",
"content": "本文整理 ES 7.x 核心操作命令...",
"publish_time": "2026-04-09",
"tags": ["ES", "大数据", "搜索引擎"]
}
# 2. 自动生成文档 ID
POST /blog/_doc
{
"title": "Elasticsearch 聚合查询实战",
"author": "张三",
"publish_time": "2026-04-10"
}
# 响应说明
{
"_index": "blog", # 索引名
"_type": "_doc", # 7.x 唯一类型(已简化,无需自定义)
"_id": "1", # 文档 ID
"_version": 1, # 版本号(更新会自增)
"result": "created" # 操作结果(created/updated)
}
2. 文档查询(获取数据)
# 1. 通过 ID 获取单个文档
GET /blog/_doc/1
# 2. 只返回指定字段(提升查询效率)
GET /blog/_doc/1?_source=title,author,publish_time
# 3. 判定文档是否存在(HEAD 方法,无返回体,通过状态码判断)
HEAD /blog/_doc/1 # 200=存在,404=不存在
# 4. 批量查询文档(_mget)
GET /_mget
{
"docs": [
{ "_index": "blog", "_id": "1" },
{ "_index": "blog", "_id": "2", "_source": "title" }
]
}
3. 文档更新
# 1. 全量更新
PUT /blog/_doc/1
{
"title": "Elasticsearch 7.x 命令详解(2026修订版)",
"author": "张三",
"content": "更新后的内容...",
"publish_time": "2026-04-09",
"tags": ["ES", "大数据", "搜索引擎", "备忘录"]
}
# 2. 局部更新
POST /blog/_doc/1/_update
{
"doc": {
"title": "Elasticsearch 7.x 常用命令备忘录(终极版)",
"tags": ["ES", "大数据", "搜索引擎", "备忘录", "实战"]
}
}
# 3. 脚本更新
POST /blog/_doc/1/_update
{
"script": {
"source": "ctx._source.read_count = ctx._source.read_count + 1",
"lang": "painless" # ES 内置脚本语言
}
}
4. 文档删除
# 通过 ID 删除单个文档
DELETE /blog/_doc/1
# 批量删除
POST /blog/_delete_by_query
{
"query": {
"match": { "author": "无效作者" }
}
}
五、查询与聚合命令
1. 基础查询
# 1. 全文检索(匹配 content 中包含「ES 命令」的文档)
GET /blog/_search
{
"query": {
"match": { "content": "ES 命令" }
}
}
# 2. 精确匹配(keyword 类型字段,如 tags 包含「备忘录」)
GET /blog/_search
{
"query": {
"term": { "tags": "备忘录" }
}
}
# 3. 范围查询(日期范围:2026-04-01 之后的文档)
GET /blog/_search
{
"query": {
"range": {
"publish_time": {
"gte": "2026-04-01", # 大于等于
"lte": "2026-04-30" # 小于等于
}
}
},
"size": 20, # 返回 20 条结果(默认 10 条)
"from": 0 # 分页起始位置(从 0 开始)
}
# 4. 过滤查询(只返回需要的字段,过滤无关数据)
GET /blog/_search
{
"query": {
"bool": {
"must": { "match": { "content": "ES" } }, # 必须满足
"filter": { "range": { "publish_time": { "gte": "2026-01-01" } } } # 过滤条件(不影响评分)
}
},
"_source": ["title", "author", "publish_time"] # 只返回指定字段
}
2. 聚合分析
# 1. 分组统计(按 author 分组,统计每个作者的文档数)
GET /blog/_search
{
"size": 0, # 不返回原始文档,只返回聚合结果
"aggs": {
"author_count": { # 聚合名称(自定义)
"terms": { "field": "author.keyword", "size": 10 } # keyword 类型字段分组
}
}
}
# 2. 数值统计(统计 read_count 字段的平均值、最大值)
GET /blog/_search
{
"size": 0,
"aggs": {
"read_count_stats": {
"stats": { "field": "read_count" } # 数值类型字段
}
}
}
3. SQL 查询
# 基础 SQL 查询(查询 title 包含「ES」的文档)
POST /_sql?format=json
{
"query": "SELECT title, author, publish_time FROM blog WHERE title LIKE '%ES%' ORDER BY publish_time DESC"
}
# SQL 过滤查询(结合 ES 过滤条件)
POST /_sql?format=txt
{
"query": "SELECT * FROM blog ORDER BY publish_time DESC",
"filter": {
"range": { "publish_time": { "gte": "2026-04-01", "lte": "2026-04-09" } }
},
"fetch_size": 5 # 返回 5 条结果
}
六、运维监控与问题排查命令
1. 索引健康与状态
# 查看索引分片状态(排查分片未分配问题)
GET /_cluster/allocation/explain
# 查看索引统计信息(文档数、存储大小、字段使用情况)
GET /blog/_stats
# 查看索引段信息(优化索引时使用)
GET /blog/_segments
2. 索引优化命令
# 强制合并索引段(减少碎片,提升查询性能)
POST /blog/_forcemerge?max_num_segments=1
# 刷新索引(使新增/修改的数据立即可见)
POST /blog/_refresh
# 刷新所有索引
POST /_refresh
3. 日志与问题排查
# 查看节点日志(需开启日志 API,默认关闭)
GET /_nodes/logging
# 查看慢查询日志(需提前配置 slowlog)
GET /_cat/indices?v&s=pri.store.size:desc # 按存储大小排序,定位大索引
七、避坑指南
-
索引删除警告 :
DELETE /_all或DELETE /*会删除所有索引,生产环境务必禁用,可通过配置action.destructive_requires_name: true限制; -
分片配置建议:主分片数创建后不可修改,副本分片数可动态调整;生产环境主分片数建议按节点数的 1.5-2 倍配置(如 3 节点设 3-5 个主分片);
-
文档 ID 选择:指定 ID 需确保唯一性,自动生成 ID 采用 UUID 格式,适合高频写入场景;
-
查询性能优化 :避免使用
match_all全量查询,大索引分页建议使用scroll或search_after替代from/size; -
版本冲突处理 :并发更新时可能出现版本冲突,可通过
retry_on_conflict参数设置重试次数(如POST /blog/_doc/1/_update?retry_on_conflict=3)。