使用JSON查询Elasticsearch:如何获取索引表信息
在Elasticsearch(简称ES)中,"表"的概念对应的是索引(Index),每个索引是一个独立的文档集合,类似于传统数据库中的表,要使用JSON查询ES中的索引(表)信息,核心是通过ES提供的RESTful API发送HTTP请求,请求体或请求参数中使用JSON格式定义查询条件,本文将详细介绍如何通过JSON查询ES中的索引列表、索引详情及元数据,帮助您快速ES索引信息的获取方法。
基础概念:ES中的"表"是什么?
在ES中,数据存储的基本结构是:索引(Index)→ 类型(Type,7.x版本后已弃用)→ 文档(Document),索引是"表"的直接对应,用于存储具有相似结构的文档(如用户订单、商品信息等),每个索引有自己的元数据(如设置、映射、分片信息等),了解这些元数据有助于数据管理和查询优化。
如何通过JSON查询ES索引信息?
ES提供了多种API来获取索引信息,核心是通过GET或POST请求发送JSON格式的查询条件,以下是常用场景及具体操作方法。
查询所有索引列表(获取"表"名称)
最基础的需求是获取ES中所有索引的名称,类似于传统数据库中的SHOW TABLES,ES提供了_cat/indices API,支持通过JSON格式返回结构化数据。
请求方式:
GET /_cat/indices?v&format=json
参数说明:
v:显示详细列(如索引名称、健康状态、文档数量等)。format=json:返回JSON格式数据(默认为纯文本,json更易解析)。
返回示例(JSON格式):
[
{
"health": "green",
"status": "open",
"index": "users",
"uuid": "a1b2c3d4e5f6g7h8i9j0",
"pri": "5", // 主分片数
"rep": "1", // 副本分片数
"docs.count": "1000", // 文档总数
"docs.deleted": "0", // 已删除文档数
"store.size": "2.3mb", // 存储大小
"pri.store.size": "1.1mb" // 主分片存储大小
},
{
"health": "yellow",
"status": "open",
"index": "orders",
"uuid": "k9l8m7n6o5p4q3r2s1t",
"pri": "3",
"rep": "1",
"docs.count": "5000",
"docs.deleted": "10",
"store.size": "5.7mb",
"pri.store.size": "3.2mb"
}
]
解析结果:
index字段即为索引名称("表名");health字段表示索引健康状态(green正常、yellow副本分片异常、red主分片异常)。
查询特定索引的元数据(获取"表"结构信息)
如果需要获取某个索引的详细元数据(如映射、设置、分片配置等),可以使用GET /{index} API,返回JSON格式的完整元数据。
请求方式:
GET /{index}
替换{index}为目标索引名称(如users),支持多索引用逗号分隔(users,orders)或通配符(user*)。
返回示例(JSON格式):
{
"users": {
"aliases": {}, // 索引别名
"mappings": { // 字段映射(类似表结构定义)
"properties": {
"name": {
"type": "text", // 文本类型(支持分词)
"fields": {
"keyword": { // keyword子字段(精确匹配)
"type": "keyword"
}
}
},
"age": {
"type": "integer" // 整数类型
},
"email": {
"type": "keyword" // 关键字类型(不分词)
},
"create_time": {
"type": "date" // 日期类型
}
}
},
"settings": { // 索引设置
"index": {
"number_of_shards": "5", // 主分片数
"number_of_replicas": "1", // 副本分片数
"creation_date": "1672531200000", // 创建时间戳
"uuid": "a1b2c3d4e5f6g7h8i9j0",
"version": {
"created": "7170099" // ES版本号
}
}
}
}
}
关键字段解析:
mappings:定义了索引的字段类型(如text、keyword、integer等),类似于传统数据库的表结构;settings:包含索引的配置参数(如分片数、副本数、生命周期策略等)。
使用查询条件(Query DSL)筛选索引
如果需要根据特定条件筛选索引(如按索引名称模式、创建时间、文档数量等),可以通过POST /_cat/indices API结合query参数发送JSON格式的查询条件。
请求方式:
POST /_cat/indices?format=json&query={...}
示例1:查询名称以"user"开头的索引
POST /_cat/indices?format=json&query={"index":"user*"}
示例2:查询文档数量大于1000的索引
POST /_cat/indices?format=json&query={"docs.count":{"gt":"1000"}}
示例3:查询健康状态为"green"的索引
POST /_cat/indices?format=json&query={"health":"green"}
返回示例:
[
{
"health": "green",
"status": "open",
"index": "user_profile",
"docs.count": "1500",
"store.size": "3.1mb"
}
]
Query DSL常用操作符:
- 模糊匹配:
"index":"user*"(通配符); - 比较操作:
"docs.count":{"gt":"1000"}(gt大于、lt小于、gte大于等于、lte小于等于); - 精确匹配:
"health":"green"。
获取索引的统计信息(如文档数量、存储大小等)
如果需要获取索引的详细统计信息(如文档数量、删除数、存储大小、查询耗时等),可以使用GET /{index}/_stats API,返回JSON格式的统计数据。
请求方式:
GET /{index}/_stats
返回示例(JSON格式):
{
"users": {
"_all": {
"primaries": {
"docs": {
"count": 1000, // 文档总数
"deleted": 0 // 已删除文档数
},
"store": {
"size_in_bytes": 1153433, // 存储大小(字节)
"total_data_set_size_in_bytes": 1153433
},
"indexing": {
"index_total": 1000, // 索引操作次数
"index_time_in_millis": 150 // 索引耗时(毫秒)
}
},
"total": {
"docs": {
"count": 1000,
"deleted": 0
},
"store": {
"size_in_bytes": 2306866 // 总存储大小(含副本分片)
}
}
}
}
}
实战:通过Kibana Dev Tools查询索引信息
ES通常与Kibana配合使用,Kibana的Dev Tools提供了便捷的API查询界面,支持直接编写JSON请求,以下是操作步骤:
- 打开Kibana,进入"Management" → "Dev Tools";
- 在Console中输入请求命令(如
GET /_cat/indices?v&format=json); - 点击"Execute"按钮,下方会返回JSON格式的响应结果;
- 可通过"JSON"选项卡查看结构化数据,或"Pretty"选项卡格式化显示。
常见问题与注意事项
- 权限问题:
如果查询失败,可能是用户权限不足,确保使用的ES用户有`indices:admin/get



还没有评论,来说两句吧...