摘要:ES所提供的Http服务适合用作集群状态和数据的监控,而不适合直接用于数据操作。ES提供了多种语言(包括Java、Python、PHP、Ruby等)版本的Client API,可以使用这些Client API编程实现数据操作功能。在这里主要介绍使用Java版本的Client来操作数据。ES中所有的Java API调用都要使用Client对象,ES为API调用者提供了两类Client对象:NodeClient和TransportClient。TransportClient适合用于生产环境中,本文主要介绍TransportClient。
使用TransportClient连接ES
使用elastic search Client 为5.2.2版本,引入如下依赖。
Tips: 建议API的版本与ES集群所使用的版本保持一致,以免出现因版本不一致而导致的冲突。由于org.elasticsearch.client依赖Log4j,因此还需要配置如下依赖
|
|
Tips
https://www.elastic.co/guide/en/elasticsearch/client/java-api/5.2/_maven_repository.html
封装ES Client工具类
1.在实际使用中,我们会把ES的相关配置信息,抽取到elasticsearch.yaml中
|
|
- 根据Java SDK的写法,需要做写如下硬编码操作的Code。1234567891011121314151617181920212223String deviceId = "23566d22-6a30-30a9-a874-e1bf75ab688b";Settings settings =Settings.builder().put("cluster.name","vpc-ops-elk-elastic-cluster").build();Client client = new PreBuiltTransportClient(settings).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("192.168.67.200"), 9300)).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("192.168.67.149"), 9300)).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("192.168.67.215"), 9300)).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("192.168.67.156"), 9300)).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("192.168.67.178"), 9300)).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("192.168.67.240"), 9300)).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("192.168.67.153"), 9300)).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("192.168.67.90"), 9300)).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("192.168.67.228"), 9300)).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("192.168.67.125"), 9300));QueryBuilder qb = matchQuery("@message.deviceInfo.deviceId",deviceId);SearchResponse response = client.prepareSearch("mt-apm-*").setQuery(qb).execute().actionGet();System.out.println(response);client.close();
上述写法存在很多硬编码,无法做到配置和程序代码分离,因此需要设计一个ES工具类用于生成调用Client,下面ESClientHelper工具类如下。
设计ESClientHelper
ESClientHelper.java
|
|
相对于 java API 2.4.4 版本来说,升级依赖之后,需要做如下改动。将下面的代码修改上述中的代码。
使用ESClientHelper
使用ESClientHelper.getInstance()获取ESClient
1.匹配查询
2.根据时间段聚合查询