elasticsearch客户端使用

394 阅读2分钟
最近项目中使用到了elasticsearch,于是整理了一些项目中遇到的问题和常用方法。首次写,忘各位嘴下留情。。。
备注:本文档基于elasticsearch 5.4.2,且使用TransportClient客户端

一、客户端介绍

客户端 优点 缺点 连接方式 备注
TransportClient 1、启动速度快,轻量级,可创建多连接。2、使用Transport 接口进行通信,能够使用ES集群中的一些特性,性能最好 1、分发或查询数据速度较慢,不能获取指定节点数据。2、JAR包版本需与ES集群版本一致,ES集群升级,客户端也跟着升级到相同版本 tcp 端口 9200 1、es逐渐会弃用此客户端
Java Low Level Rest Client 1、与ES版本之间没有关系,适用于作为所有版本ES的客户端 1、用户需自己编组请求JSON串,及解析响应JSON串 http 端口 9300
Java High Level Rest Client 1、官方推荐使用,基于Low Level Rest Client 1、使用需与ES版本保持一致 http 端口 9300
JestClient 1、与ES版本之间没有关系,适用于跨版本,若ES集群使用不同的ES版本,使用原生ES API会有问题2、提供Restful API http 端口 9300 开源

二、java客户端使用

1、pom文件中添加依赖

 	<dependency>
 		<groupId>org.elasticsearch.client</groupId>
 		<artifactId>transport</artifactId>
 		<version>5.4.2</version>
 	</dependency>
 	<dependency>
 		<groupId>org.elasticsearch</groupId>
 		<artifactId>elasticsearch</artifactId>
 		<version>5.4.2</version>
 	</dependency>
 	<dependency>
 		<groupId>org.apache.logging.log4j</groupId>
 		<artifactId>log4j-1.2-api</artifactId>
 		<version>2.6.2</version>
 	</dependency>
 	<dependency>
 		<groupId>io.netty</groupId>
 		<artifactId>netty-all</artifactId>
 		<version>4.1.11.Final</version>
 	</dependency>

2、resource目录下新建 log4j2.xml

 appender.console.type = Console
 appender.console.name = console
 appender.console.layout.type = PatternLayout
 rootLogger.level = info
 rootLogger.appenderRef.console.ref = console

3、java代码

import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.net.InetAddress;
import java.util.Arrays;
import java.util.List;

public class ESUtils {
 private static final Logger logger = LoggerFactory.getLogger(ESUtils.class);
 private String ips = "192.168.111.1,192.168.111.2,192.168.111.3";
 private String port = "9300";
 private String cluster = "cluster_name";
 private String index = "index_name";
 private String type = "index_name";

 public TransportClient connect() {
     TransportClient transportClient = null;
     try {
         List<String> ipList = Arrays.asList(ips.split(","));
         Settings settings = Settings.builder().put("cluster.name", cluster)
                 //启动嗅探功能,这样只需要指定集群中的某一个节点(不一定是主节点),然后会加载集群中的其他节点,这样只要程序不停即使此节点宕机仍然可以连接到其他节点。
                 .put("client.transport.sniff", true)
                 .build();
         transportClient = new PreBuiltTransportClient(settings);
         for (String ip : ipList) {
             transportClient.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(ip), Integer.parseInt(port)));
         }
     } catch (Exception e) {
         logger.error(e.getMessage());
     }
     return transportClient;
 }
}