在日常开发中,操作 Elasticsearch(ES)最便捷的方式就是通过 Kibana DevTools,无论是调试查询语句、验证索引结构,还是排查数据问题,都离不开一套规范的 URL 写法和查询语法。本文整理了 ES 核心 URL 规范、Kibana 查询 DSL 语法、常用实操示例,全部可直接复制粘贴到 DevTools 运行,适合收藏备用,再也不用反复查文档!
一、前言
Kibana DevTools 是 ES 官方提供的可视化操作工具,支持直接编写 ES 原生查询语句(DSL),所有操作都通过 URL + HTTP 请求方式 实现。本文核心目标:让开发者记住规范、复制即用,减少调试成本,重点覆盖日常开发中 99% 的使用场景。
适用场景:ES 新手入门、日常开发调试、查询语句验证、索引维护,适配绝大多数 ES 版本(7.x+ 通用)。
二、核心规范:ES URL 写法(必背)
ES 的所有操作(查询、新增、删除、更新)都遵循固定的 URL 格式,结合 HTTP 请求方式区分操作类型,记住以下规范,杜绝 URL 写错导致的报错。
2.1 URL 固定基础格式
所有 ES URL 都遵循「请求方式 + 路径」的结构,核心格式:
请求方式 /索引名/操作关键字
说明:
- 请求方式:对应操作类型(GET/POST/PUT/DELETE),不可混淆
- 索引名:你要操作的 ES 索引(本文统一以
users为例,对应项目中的用户索引) - 操作关键字:ES 固定关键字,标识具体操作(如 _search、_doc、_update 等)
2.2 常用 URL 规范(可直接复制)
以下 URL 覆盖日常开发所有核心操作,结合 Kibana 可直接运行,附带详细说明:
# ================================
# 一、查询相关 URL(最常用)
# ================================
# 1. 条件查询(支持所有 DSL 语法,必用)
GET /users/_search
# 2. 根据文档ID精确查询(快速获取单个数据)
GET /users/_doc/1
# 3. 只统计符合条件的文档数量(不返回具体数据,高效)
GET /users/_count
# 4. 查看索引的 mapping 结构(验证字段类型、分词配置)
GET /users/_mapping
# 5. 查看索引的统计信息(文档数、存储大小等)
GET /users/_stats
# ================================
# 二、索引操作 URL(索引维护)
# ================================
# 1. 创建索引(需配合 mapping 配置,可选)
PUT /users
# 2. 删除整个索引(谨慎操作!会删除所有数据)
DELETE /users
# ================================
# 三、文档操作 URL(新增/修改/删除单条数据)
# ================================
# 1. 新增文档(指定ID,重复请求会全量替换)
POST /users/_doc/1
# 2. 新增文档(自动生成ID,无需指定)
POST /users/_doc
# 3. 局部更新文档(只更新指定字段,不影响其他字段)
POST /users/_update/1
# 4. 删除单个文档(根据ID)
DELETE /users/_doc/1
# ================================
# 四、批量操作 URL(高效操作多条数据)
# ================================
# 1. 批量新增/修改/删除(bulk 关键字,通用批量操作)
POST /_bulk
# 2. 按条件批量删除(根据查询条件删除符合要求的所有文档)
POST /users/_delete_by_query
# ================================
# 五、集群状态、监控、分片相关 URL(系统环境查询)
# ================================
# 1. 查看集群整体健康状态(核心!判断集群是否正常)
GET /_cluster/health
# 2. 查看集群详细状态(包含节点、分片、索引等完整信息)
GET /_cluster/state
# 3. 查看集群中所有节点信息(节点名称、角色、IP等)
GET /_cat/nodes?v
# 4. 查看所有索引的分片分布(主分片、副本分片分布在哪些节点)
GET /_cat/shards?v
# 5. 查看指定索引的分片详情(以users索引为例)
GET /_cat/shards/users?v
# 6. 查看集群索引统计信息(所有索引的分片、文档数、存储大小)
GET /_cat/indices?v
# 7. 查看分片分配情况(排查分片未分配、分片异常问题)
GET /_cluster/allocation/explain
# 8. 查看节点资源监控(CPU、内存、磁盘使用率等)
GET /_cat/nodes?v&h=name,cpus,ram.percent,disk.percent
# 9. 查看集群任务监控(当前运行的任务、任务进度)
GET /_tasks
# 10. 查看索引的分片恢复状态(分片故障后恢复进度)
GET /_cat/recovery?v
2.3 固定关键字说明(不可写错)
ES URL 中的操作关键字是固定写法,写错会直接报错,整理核心关键字对照表:
| 关键字 | 作用 | 常用请求方式 |
|---|---|---|
| _search | 查询数据(支持所有 DSL 条件) | GET |
| _doc | 文档操作(新增、查询、删除单条文档) | GET/POST/DELETE |
| _update | 局部更新文档 | POST |
| _mapping | 查看/设置索引结构 | GET/PUT |
| _count | 统计文档数量 | GET |
| _bulk | 批量操作(新增、修改、删除多条) | POST |
| _delete_by_query | 按条件批量删除 | POST |
| _cluster/health | 查看集群健康状态 | GET |
| _cluster/state | 查看集群详细状态 | GET |
| _cat/nodes | 查看集群节点信息 | GET |
| _cat/shards | 查看分片分布 | GET |
2.4 HTTP 请求方式规范(必遵守)
ES 严格区分 HTTP 请求方式,不同方式对应不同操作,写错会导致操作失败,核心对应关系:
- GET:查询、获取数据(无副作用,不会修改数据),如查询文档、查看 mapping、统计数量、集群状态查询
- POST:新增、修改、批量操作(有副作用,会修改数据),如新增文档、局部更新、批量删除
- PUT:创建索引、全量替换文档(幂等操作,重复执行结果一致)
- DELETE:删除索引、删除单条文档(有副作用,谨慎操作)
三、Kibana DevTools 查询 DSL 规范(核心)
Kibana DevTools 中,所有查询都通过 ES 原生 DSL(Domain Specific Language)编写,DSL 是 JSON 格式的查询语句,遵循固定结构,记住框架就能灵活编写所有查询。
3.1 DSL 固定查询框架(必背)
所有查询语句 99% 都遵循以下框架,只需替换「查询类型」和「查询条件」即可:
GET /users/_search
{
"query": {
// 这里填写查询类型(term/match/range/bool 等)
},
"from": 0, // 分页:起始位置(默认0)
"size": 10, // 分页:每页条数(默认10)
"_source": ["name", "age"], // 可选:只返回指定字段,减少数据传输
"sort": [ // 可选:排序(字段 + 排序方式)
{"age": "desc"} // desc=倒序,asc=正序
],
"highlight": { // 可选:高亮查询(关键词标红)
"fields": {
"name": {}
},
"pre_tags": ["<span style='color:red'>"],
"post_tags": ["</span>"]
}
}
说明:外层固定是 query,里面填写具体的查询类型,其他参数(from、size、_source 等)按需添加,非必选。
3.2 常用查询 DSL 示例(可直接复制运行)
以下示例全部适配 users 索引(字段:name、age、address、createTime),复制到 Kibana DevTools 点击运行即可出结果,覆盖日常所有查询场景。
# ================================
# 1. 精确查询(term):完全匹配,不分词(适合用户名、ID、手机号)
# 场景:查询名字完全等于「用户1」的文档
GET /users/_search
{
"query": {
"term": {
"name.keyword": "用户1" // 注意:精确查询需加 .keyword(不分词)
}
}
}
# ================================
# 2. 全文检索(match):分词匹配,包含即可(适合搜索、模糊查询)
# 场景:查询名字包含「用户」的所有文档(会分词为「用户」,匹配所有包含该词的文档)
GET /users/_search
{
"query": {
"match": {
"name": "用户" // 无需加 .keyword,会自动分词
}
}
}
# ================================
# 3. 多字段全文检索(multi_match):同时在多个字段中查询
# 场景:查询「北京」关键词,同时匹配 name 和 address 字段
GET /users/_search
{
"query": {
"multi_match": {
"query": "北京",
"fields": ["name", "address"] // 多个字段用数组表示
}
}
}
# ================================
# 4. 范围查询(range):数字、时间范围查询(最常用)
# 场景1:查询年龄在 20~30 之间的文档(gte=大于等于,lte=小于等于)
GET /users/_search
{
"query": {
"range": {
"age": {
"gte": 20,
"lte": 30
}
}
}
}
# 场景2:查询创建时间在 2025-2026 之间的文档(指定时间格式)
GET /users/_search
{
"query": {
"range": {
"createTime": {
"gte": "2025-01-01 00:00:00",
"lte": "2026-12-31 23:59:59",
"format": "yyyy-MM-dd HH:mm:ss" // 必须指定时间格式,否则报错
}
}
}
}
# ================================
# 5. 模糊查询(fuzzy):容错查询(适合输错字的场景)
# 场景:查询名字包含「用护」(输错「用户」)的文档,自动容错匹配
GET /users/_search
{
"query": {
"fuzzy": {
"name": "用护"
}
}
}
# ================================
# 6. 复合查询(bool):多条件组合查询(最常用!)
# 场景:查询名字包含「用户」且年龄 ≥ 20 的文档(must=必须满足,filter=过滤)
GET /users/_search
{
"query": {
"bool": {
"must": [ // 必须满足(类似 AND)
{"match": {"name": "用户"}}
],
"filter": [ // 过滤条件(不计分,查询速度更快)
{"range": {"age": {"gte": 20}}}
]
}
},
"sort": [{"age": "desc"}], // 按年龄倒序
"_source": ["name", "age"] // 只返回名字和年龄字段
}
# ================================
# 7. 分页 + 排序查询(日常调试必用)
# 场景:查询所有文档,分页(第1页,10条/页),按年龄倒序
GET /users/_search
{
"from": 0,
"size": 10,
"sort": [
{"age": "desc"}
],
"query": {
"match_all": {} // match_all:查询所有文档
}
}
# ================================
# 8. 高亮查询(前端展示关键词标红)
# 场景:查询名字包含「用户」的文档,关键词标红(可直接用于前端展示)
GET /users/_search
{
"query": {
"match": {
"name": "用户"
}
},
"highlight": {
"fields": {
"name": {} // 要高亮的字段
},
"pre_tags": ["<span style='color:red'>"], // 高亮前缀标签
"post_tags": ["</span>"] // 高亮后缀标签
}
}
3.3 DSL 核心关键字规范(不可写错)
DSL 中的查询关键字是 ES 固定写法,写错会导致查询失败,整理常用关键字:
- term:精确匹配,不分词
- match:分词匹配,全文检索
- multi_match:多字段分词匹配
- range:范围查询(数字、时间)
- bool:复合条件查询(组合多个查询)
- must:bool 子句,必须满足(AND)
- filter:bool 子句,过滤条件(不打分,速度快)
- gte:range 子句,大于等于
- lte:range 子句,小于等于
- match_all:查询所有文档
四、集群状态、监控、分片相关查询(系统环境实操)
日常开发/运维中,经常需要查看 ES 集群健康、节点状态、分片分布等系统信息,以下查询可直接复制到 Kibana DevTools 运行,快速排查集群问题、监控系统状态。
4.1 核心查询示例(可直接复制)
# ================================
# 一、集群健康与状态查询(最常用)
# ================================
# 1. 查看集群健康状态(核心!快速判断集群是否正常)
# 结果中 status 字段:green=健康,yellow=副本缺失,red=主分片缺失(异常)
GET /_cluster/health
# 2. 查看集群健康状态(详细版,包含所有索引的健康信息)
GET /_cluster/health?level=indices
# 3. 查看集群详细状态(包含节点、分片、索引、配置等完整信息)
GET /_cluster/state
# 4. 查看集群详细状态(只显示索引相关信息,精简输出)
GET /_cluster/state/indices
# ================================
# 二、节点监控查询
# ================================
# 1. 查看集群中所有节点信息(节点名称、角色、IP、端口等)
# v 参数:显示表头,便于查看
GET /_cat/nodes?v
# 2. 查看节点资源监控(CPU、内存、磁盘使用率,重点关注异常)
GET /_cat/nodes?v&h=name,cpus,ram.percent,disk.percent,load_1m,load_5m
# 3. 查看节点角色分布(区分主节点、数据节点、协调节点)
GET /_cat/nodes?v&h=name,role,master
# ================================
# 三、分片相关查询(排查分片异常)
# ================================
# 1. 查看所有索引的分片分布(主分片、副本分片,分布在哪些节点)
GET /_cat/shards?v
# 2. 查看指定索引的分片详情(以users索引为例,重点看状态)
# state 字段:STARTED=正常,UNASSIGNED=未分配(异常)
GET /_cat/shards/users?v
# 3. 查看分片分配异常原因(当分片显示 UNASSIGNED 时,排查问题)
GET /_cluster/allocation/explain
# 4. 查看分片恢复状态(分片故障后,恢复进度)
GET /_cat/recovery?v
# 5. 查看指定索引的分片数量配置(主分片数、副本分片数)
GET /users/_settings
# ================================
# 四、集群整体监控
# ================================
# 1. 查看所有索引的统计信息(文档数、存储大小、分片数)
GET /_cat/indices?v
# 2. 查看集群当前运行的任务(如分片迁移、索引创建等,排查卡顿时使用)
GET /_tasks
# 3. 查看集群任务详情(指定任务ID,进一步排查问题)
# 替换 {taskId} 为实际任务ID(从 /_tasks 查询结果中获取)
GET /_tasks/{taskId}
# 4. 查看集群索引模板信息(了解索引创建时的默认配置)
GET /_cat/templates?v
4.2 关键参数与结果说明(避坑重点)
- 集群健康 status:green(健康,所有主分片、副本分片正常)、yellow(主分片正常,副本分片缺失)、red(主分片缺失,集群异常,无法提供完整服务);
- 分片 state:STARTED(正常运行)、UNASSIGNED(未分配,需排查节点资源、分片配置)、INITIALIZING(初始化中,耐心等待);
- v 参数:所有 _cat 开头的查询,加上 ?v 可显示表头,便于查看字段含义,避免看不懂结果;
- h 参数:用于筛选显示的字段,如 &h=name,cpus,只显示节点名称和CPU信息,精简输出。
五、实操注意事项(避坑指南)
日常使用 Kibana DevTools 时,容易踩坑的几个点,提前规避:
- 精确查询必须加
.keyword:如name.keyword,否则会分词,导致精确匹配失效; - 时间范围查询必须指定
format:否则 ES 无法解析时间格式,报错; - DELETE 操作谨慎使用:删除索引(DELETE /users)、删除文档(DELETE /users/_doc/1)会直接删除数据,无法恢复;
- 批量操作(bulk)格式严格:每行 JSON 不能换行,必须按固定格式编写(参考本文批量操作示例);
- 查询语句 JSON 格式正确:逗号不能漏、大括号要配对,否则会报语法错误;
- 集群查询无需指定索引:所有集群、节点、分片相关查询,URL 开头无需加索引名(如 GET /_cluster/health,而非 GET /users/_cluster/health);
- 分片未分配排查:当分片显示 UNASSIGNED 时,先执行 GET /_cluster/allocation/explain,查看具体未分配原因(如节点资源不足、分片数超过节点数)。
六、常用操作速查表(收藏备用)
整理日常最常用的操作,直接复制粘贴,无需记忆:
# 1. 查看 users 索引结构
GET /users/_mapping
# 2. 查询所有用户(分页10条)
GET /users/_search
{
"from": 0,
"size": 10,
"query": {
"match_all": {}
}
}
# 3. 精确查询名字=用户1
GET /users/_search
{
"query": {
"term": {
"name.keyword": "用户1"
}
}
}
# 4. 条件批量删除(年龄>30)
POST /users/_delete_by_query
{
"query": {
"range": {
"age": { "gt": 30 }
}
}
}
# 5. 查看集群健康状态
GET /_cluster/health
# 6. 查看所有节点信息
GET /_cat/nodes?v
# 7. 查看所有分片分布
GET /_cat/shards?v
# 8. 查看指定索引分片详情(users)
GET /_cat/shards/users?v
七、总结
本文整理了 Elasticsearch Kibana DevTools 最核心的 URL 规范、DSL 查询语法、常用实操示例,新增集群状态、监控、分片相关系统环境查询,全部可直接复制运行,覆盖日常开发、运维 99% 的使用场景。
核心要点:
- URL 遵循「请求方式 + 索引名 + 操作关键字」,请求方式不可混淆;集群相关查询无需指定索引名;
- DSL 查询遵循固定框架,核心是
query+ 具体查询类型; - 精确查询加
.keyword,时间范围加format,分片异常用 /_cluster/allocation/explain 排查,避坑关键; - 所有示例可直接粘贴到 Kibana DevTools 运行,适合收藏备用,兼顾开发调试和系统监控。
后续使用 Kibana DevTools 时,直接打开本文,复制对应示例,修改条件即可快速完成操作,无需反复查文档,提高开发、运维效率。