You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过ReactiveElasticsearchClient获取索引文档数与大小?

解决方案

要获取索引的文档计数(IndexDocumentCount)和存储大小(IndexSize),你需要调用Elasticsearch的索引统计接口——因为GetIndexResponse仅返回索引的元数据(配置、映射、别名),而运行时统计数据(文档数、存储大小)需要通过IndicesStatsRequest来获取。结合你使用的spring-data-elasticsearch 5.1.3(对应Elasticsearch 7.17客户端),具体实现如下:

1. 获取索引统计数据(文档数、大小)

使用ReactiveElasticsearchIndicesClient的stats()方法发起统计请求,指定需要获取的核心指标:

ReactiveElasticsearchIndicesClient indicesClient = reactiveElasticsearchClient.indices();

// 构建统计请求,匹配所有索引,仅请求文档和存储相关统计
IndicesStatsRequest statsRequest = new IndicesStatsRequest.Builder()
        .index("*")
        .docs(true) // 开启文档统计
        .store(true) // 开启存储统计
        .build();

// 异步获取统计响应
Mono<IndicesStatsResponse> statsResponseMono = indicesClient.stats(statsRequest);
IndicesStatsResponse statsResponse = statsResponseMono.block();

2. 解析统计数据

从IndicesStatsResponse中提取每个索引的目标数据:

// 遍历所有索引的统计信息
statsResponse.indices().forEach((indexName, indexStats) -> {
    long documentCount = indexStats.docs().count(); // 文档总数
    long indexSizeInBytes = indexStats.store().sizeInBytes(); // 索引存储大小(字节)
    
    // 可按需转换单位,比如转成MB:indexSizeInBytes / (1024 * 1024)
    System.out.printf("索引: %s, 文档数: %d, 大小: %d bytes%n", indexName, documentCount, indexSizeInBytes);
});

3. 整合所有所需信息

结合你已有的GetIndexResponse数据,将索引名称、创建时间、别名与统计数据合并:

// 先获取索引元数据
Mono<GetIndexResponse> metaResponseMono = indicesClient.get(new GetIndexRequest.Builder().index("*").build());
GetIndexResponse metaResponse = metaResponseMono.block();

// 合并元数据与统计数据
metaResponse.result().forEach((indexName, indexMeta) -> {
    // 基础元数据提取
    String name = indexName;
    long creationTime = Long.parseLong(indexMeta.settings().get("index.created_time")); // 创建时间戳
    List<String> aliases = indexMeta.aliases().keySet().stream().toList(); // 索引别名
    
    // 统计数据提取
    IndexStats indexStats = statsResponse.indices().get(indexName);
    long documentCount = indexStats.docs().count();
    long indexSizeInBytes = indexStats.store().sizeInBytes();
    
    // 输出完整信息
    System.out.printf(
        "索引名称: %s, 创建时间: %d, 别名: %s, 文档数: %d, 大小: %d bytes%n",
        name, creationTime, aliases, documentCount, indexSizeInBytes
    );
});

关键说明

  • IndicesStatsRequest支持通过docs()、store()等方法精准筛选统计指标,避免返回冗余数据;
  • 索引创建时间存储在index.created_time配置项中,需要从indexMeta.settings()提取并转换为长整型时间戳;
  • 若遵循响应式编程规范,可使用flatMap等操作符组合元数据请求与统计请求,避免调用block()阻塞线程。

内容的提问来源于stack exchange,提问作者User1254

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 23:04:54