java 连接es_java连接ElasticSearch集群操作

本文介绍了如何使用Java连接ElasticSearch集群,包括创建TransportClient、批量插入数据以及使用连接池的方法。示例代码展示了如何配置集群名称、创建TransportClient实例以及实现数据的增删改查操作。
摘要由CSDN通过智能技术生成

8af8eac2eda5aa3ed317b53350551da0.png

我就废话不多说了,大家还是直接看代码吧~

/*

*es配置类

*

*/

@Configuration

public class ElasticSearchDataSourceConfigurer {

private static final Logger LOG = LogManager.getLogger(ElasticSearchDataSourceConfigurer.class);

@Bean

public TransportClient getESClient() {

//设置集群名称

Settings settings = Settings.builder().put("cluster.name", "bigData-cluster").put("client.transport.sniff", true).build();

//创建client

TransportClient client = null;

try {

client = new PreBuiltTransportClient(settings)

.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(""), 9300));//集群ip

LOG.info("ESClient连接建立成功");

} catch (UnknownHostException e) {

LOG.info("ESClient连接建立失败");

e.printStackTrace();

}

return client;

}

}

/**

* Simple to Introduction

*

* @Description: [添加类]

*/

@Repository

public class UserDaoImpl implements userDao {

private static final String INDEXNAME = "user";//小写

private static final String TYPENAME = "info";

@Resource

TransportClient transportClient;

@Override

public int addUser(User[] user) {

IndexResponse indexResponse = null;

int successNum = 0;

for (int i = 0; i < user.length; i++) {

UUID uuid = UUID.randomUUID();

String str = uuid.toString();

String jsonValue = null;

try {

jsonValue = JsonUtil.object2JsonString(user[i]);

if (jsonValue != null) {

indexResponse = transportClient.prepareIndex(INDEXNAME, TYPENAME, str).setSource(jsonValue)

.execute().actionGet();

successNum++;

}

} catch (JsonProcessingException e) {

e.printStackTrace();

}

}

return successNum;

}

}

/**

*批量插入

*/

public static void bathAddUser(TransportClient client, List users) {

BulkRequestBuilder bulkRequest = transportClient.prepareBulk();

for (int i = 0; i < users.size(); i++) {

UUID uuid = UUID.randomUUID();

String str = uuid.toString();

String jsonValue = null;

try {

jsonValue = JsonUtil.object2JsonString(users.get(i));

} catch (JsonProcessingException e) {

e.printStackTrace();

}

bulkRequest.add(client.prepareIndex("user", "info", str).setSource(jsonValue));

// 一万条插入一次

if (i % 10000 == 0) {

bulkRequest.execute().actionGet();

}

System.out.println("已经插入第" + i + "多少条");

}

}

补充知识:使用java创建ES(ElasticSearch)连接池

1.首先要有一个创建连接的工厂类

package com.aly.util;

import org.apache.commons.pool2.PooledObject;

import org.apache.commons.pool2.PooledObjectFactory;

import org.apache.commons.pool2.impl.DefaultPooledObject;

import org.apache.http.HttpHost;

import org.elasticsearch.client.RestClient;

import org.elasticsearch.client.RestHighLevelClient;

/**

* EliasticSearch连接池工厂对象

* @author 00000

*

*/

public class EsClientPoolFactory implements PooledObjectFactory{

@Override

public void activateObject(PooledObject arg0) throws Exception {

System.out.println("activateObject");

}

/**

* 销毁对象

*/

@Override

public void destroyObject(PooledObject pooledObject) throws Exception {

RestHighLevelClient highLevelClient = pooledObject.getObject();

highLevelClient.close();

}

/**

* 生产对象

*/

//@SuppressWarnings({ "resource" })

@Override

public PooledObject makeObject() throws Exception {

//Settings settings = Settings.builder().put("cluster.name","elasticsearch").build();

RestHighLevelClient client = null;

try {

/*client = new PreBuiltTransportClient(settings)

.addTransportAddress(new TransportAddress(InetAddress.getByName("localhost"),9300));*/

client = new RestHighLevelClient(RestClient.builder(

new HttpHost("192.168.1.121", 9200, "http"), new HttpHost("192.168.1.122", 9200, "http"),

new HttpHost("192.168.1.123", 9200, "http"), new HttpHost("192.168.1.125", 9200, "http"),

new HttpHost("192.168.1.126", 9200, "http"), new HttpHost("192.168.1.127", 9200, "http")));

} catch (Exception e) {

e.printStackTrace();

}

return new DefaultPooledObject(client);

}

@Override

public void passivateObject(PooledObject arg0) throws Exception {

System.out.println("passivateObject");

}

@Override

public boolean validateObject(PooledObject arg0) {

return true;

}

}

2.然后再写我们的连接池工具类

package com.aly.util;

import org.apache.commons.pool2.impl.GenericObjectPool;

import org.apache.commons.pool2.impl.GenericObjectPoolConfig;

import org.elasticsearch.client.RestHighLevelClient;

/**

* ElasticSearch 连接池工具类

*

* @author 00000

*

*/

public class ElasticSearchPoolUtil {

// 对象池配置类,不写也可以,采用默认配置

private static GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();

// 采用默认配置maxTotal是8,池中有8个client

static {

poolConfig.setMaxTotal(8);

}

// 要池化的对象的工厂类,这个是我们要实现的类

private static EsClientPoolFactory esClientPoolFactory = new EsClientPoolFactory();

// 利用对象工厂类和配置类生成对象池

private static GenericObjectPool clientPool = new GenericObjectPool<>(esClientPoolFactory,

poolConfig);

/**

* 获得对象

*

* @return

* @throws Exception

*/

public static RestHighLevelClient getClient() throws Exception {

// 从池中取一个对象

RestHighLevelClient client = clientPool.borrowObject();

return client;

}

/**

* 归还对象

*

* @param client

*/

public static void returnClient(RestHighLevelClient client) {

// 使用完毕之后,归还对象

clientPool.returnObject(client);

}

}

以上这篇java连接ElasticSearch集群操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持云海天教程。

原文链接:https://blog.csdn.net/baidu_16217779/article/details/71633284

连接开启了SSL的Elasticsearch集群,需要使用Java的TransportClient,并使用SSLContext来设置SSL连接。以下是一个简单的示例代码: ```java import org.elasticsearch.client.transport.TransportClient; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.transport.TransportAddress; import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.XContentFactory; import org.elasticsearch.transport.client.PreBuiltTransportClient; import javax.net.ssl.SSLContext; import java.net.InetAddress; import java.security.KeyStore; import java.security.SecureRandom; import java.security.cert.CertificateException; import java.security.cert.X509Certificate; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; public class ESClient { public static void main(String[] args) throws Exception { Settings settings = Settings.builder() .put("cluster.name", "myClusterName") .put("xpack.security.user", "myUsername:myPassword") .put("xpack.security.transport.ssl.enabled", true) .put("xpack.security.transport.ssl.verification_mode", "certificate") .put("xpack.security.transport.ssl.keystore.path", "/path/to/keystore.jks") .put("xpack.security.transport.ssl.truststore.path", "/path/to/truststore.jks") .build(); SSLContext sslContext = SSLContext.getInstance("TLS"); KeyStore keyStore = KeyStore.getInstance("jks"); KeyStore trustStore = KeyStore.getInstance("jks"); keyStore.load(ESClient.class.getResourceAsStream("/path/to/keystore.jks"), "keystore_password".toCharArray()); trustStore.load(ESClient.class.getResourceAsStream("/path/to/truststore.jks"), "truststore_password".toCharArray()); TrustManager[] trustManagers = new TrustManager[] { new X509TrustManager() { public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {} public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {} public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[0]; } }}; sslContext.init(null, trustManagers, new SecureRandom()); TransportClient client = new PreBuiltTransportClient(settings) .addTransportAddress(new TransportAddress(InetAddress.getByName("localhost"), 9300)) .setSSLContext(sslContext); XContentBuilder builder = XContentFactory.jsonBuilder(); builder.startObject().field("name", "John").endObject(); client.prepareIndex("myindex", "mytype", "1") .setSource(builder) .get(); client.close(); } } ``` 在这个示例代码中,我们首先使用Elasticsearch的TransportClient创建了一个连接,然后设置了连接ES集群所需的一些参数。其中,`xpack.security.user`参数是用于认证的用户名和密码,`xpack.security.transport.ssl.enabled`参数设置为`true`表示开启SSL连接,`xpack.security.transport.ssl.verification_mode`参数设置为`certificate`表示只信任CA签署的证书。最后,我们设置了keystore和truststore的路径,并使用SSLContext将其加载。 接下来,我们使用TransportClient发送了一个简单的索引请求,将一个JSON文档插入到名为`myindex`、类型为`mytype`、ID为`1`的索引中。 注意,这只是一个简单的示例,实际应用中还需要根据实际情况进行配置和调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值