详述 Elasticsearch 通过 RESTful API 查询索引信息的方法
2023-04-18 14:11:30 时间
文章目录
情景
在使用 Elasticsearch 的时候,我们通常有两种方法来操作集群,
- 第一种:在服务器或者终端,使用命令来操作集群;
- 第二种:编写程序,通过 Elasticsearch 的 API 来操作集群。
其中,
- 第一种方式是功能最全的,Elasticsearch 的所有操作情形,都可以通过命令来实现;
- 第二种方式则略有局限,因为 Elasticsearch 的对外 API 仅提供了部分的操作接口。
因此,我们就有可以遇到这样一个问题,那就是:
- 我们想通过编程实现某些操作集群的目的,但却没有对应的 API 可供使用,如何解决?
以 Java 语言为例,Elasticsearch 提供的接口文档为:Java API,可能我们翻遍整个 API 文档也找不到对应_cat/indices
命令的接口。
解决方案
虽然 Elasticsearch 没有为我们提供对应所有命令的 Java API 接口,但其却为我们提供了所有 RESTful API 形式的接口。因此,解决方法也很简单,只要我们自己编程代码,通过 Elasticsearch 的 RESTful API 接口获取相应的结果即可!同样,以上述的_cat/indices
命令为例,我们来获取其对应的查询结果:
public Map<String, Object> getIndexInfoByIndexName(String indexName) {
Map<String, Object> indexInfoMap = new HashMap<>();
// 拼接URL,任意主节点 IP + 9200 端口
String indexInfoUrl = "http://masterNodeIp:9200/_cat/indices/";
RestTemplate restTemplate = new RestTemplate();
try {
String restfulResult = restTemplate.getForObject(indexInfoUrl + indexName, String.class);
if (restfulResult != null) {
String[] restfulResultArray = restfulResult.split(" ");
indexInfoMap.put("health", restfulResultArray[0]);
indexInfoMap.put("status", restfulResultArray[1]);
indexInfoMap.put("index", restfulResultArray[2]);
indexInfoMap.put("uuid", restfulResultArray[3]);
indexInfoMap.put("pri", restfulResultArray[4]);
indexInfoMap.put("rep", restfulResultArray[5]);
indexInfoMap.put("docs.count", restfulResultArray[6]);
indexInfoMap.put("docs.deleted", restfulResultArray[7]);
indexInfoMap.put("store.size", restfulResultArray[8]);
indexInfoMap.put("pri.store.size", restfulResultArray[9].replace("
", ""));
}
} catch (Throwable e) {
logger.error("call { " + indexInfoUrl + indexName + " } come cross a error, message is " + e);
}
return indexInfoMap;
}
如上述所示,为简单的调用 RESTful API 接口的代码示例。
在这里,有两点需要我们特别注意的事情,分别为:
- 接口IP,为 Elasticsearch 集群中任意主节点的 IP 即可;
- 端口号,对外暴露的 RESTful API 端口为 9200,而 9300 为节点间通讯端口。
最后,本文的内容简单易懂,希望能够为有此类疑问的同学提供一点解决思路,如果能再帮助三两个同学解决问题就更好了。
相关文章
- 直接在代码里面对list集合进行分页
- .NET Framework 4.5新特性详解
- 大数据的简要介绍
- 大数据的由来
- 高斯混合模型的自然梯度变量推理
- timing-wheel 仿Kafka实现的时间轮算法
- 使用Navicat软件连接自建数据库(Linux系统)
- 那一天,我被Redis主从架构支配的恐惧
- Redis 深入了解键的过期时间
- C#使用委托调用实现用户端等待闪屏
- 基于流计算 Oceanus 和 Elasticsearch Service 构建百亿级实时监控系统
- GRAND | 转录调控网络预测数据库
- JFreeChart API中文文档
- 临床相关突变查询数据库
- TIGER | 人类胰岛基因变化查询数据库
- 视频边缘计算网关EasyNVR在视频整体监控解决方案中的应用分析
- Apache Arrow - 大数据在数据湖后的下一个风向标
- 常见的电商数据指标体系
- AKShare-艺人数据-艺人流量价值
- MySQL中多表联合查询与子查询的这些区别,你可能不知道!