Elasticsearch Kibana DevTools 实操指南(URL+查询规范+可直接复制示例)

7 阅读13分钟

在日常开发中,操作 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 时,容易踩坑的几个点,提前规避:

  1. 精确查询必须加 .keyword:如 name.keyword,否则会分词,导致精确匹配失效;
  2. 时间范围查询必须指定format:否则 ES 无法解析时间格式,报错;
  3. DELETE 操作谨慎使用:删除索引(DELETE /users)、删除文档(DELETE /users/_doc/1)会直接删除数据,无法恢复;
  4. 批量操作(bulk)格式严格:每行 JSON 不能换行,必须按固定格式编写(参考本文批量操作示例);
  5. 查询语句 JSON 格式正确:逗号不能漏、大括号要配对,否则会报语法错误;
  6. 集群查询无需指定索引:所有集群、节点、分片相关查询,URL 开头无需加索引名(如 GET /_cluster/health,而非 GET /users/_cluster/health);
  7. 分片未分配排查:当分片显示 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 时,直接打开本文,复制对应示例,修改条件即可快速完成操作,无需反复查文档,提高开发、运维效率。