java連接ElasticSearch集群操作
我就廢話不多說了,大家還是直接看代碼吧~
/*
*es配置類
*
*/
@Configuration
public class ElasticSearchDataSourceConfigurer {
private static final Logger LOG = LogManager.getLogger(ElasticSearchDataSourceConfigurer.class);
@Bean
public TransportClient getESClient() {
//設(shè)置集群名稱
Settings settings = Settings.builder().put("cluster.name", "bigData-cluster").put("client.transport.sniff", true).build();
//創(chuàng)建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<User> 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("已經(jīng)插入第" + i + "多少條");
}
}
補充知識:使用java創(chuàng)建ES(ElasticSearch)連接池
1.首先要有一個創(chuàng)建連接的工廠類
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<RestHighLevelClient>{
@Override
public void activateObject(PooledObject<RestHighLevelClient> arg0) throws Exception {
System.out.println("activateObject");
}
/**
* 銷毀對象
*/
@Override
public void destroyObject(PooledObject<RestHighLevelClient> pooledObject) throws Exception {
RestHighLevelClient highLevelClient = pooledObject.getObject();
highLevelClient.close();
}
/**
* 生產(chǎn)對象
*/
// @SuppressWarnings({ "resource" })
@Override
public PooledObject<RestHighLevelClient> 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<RestHighLevelClient>(client);
}
@Override
public void passivateObject(PooledObject<RestHighLevelClient> arg0) throws Exception {
System.out.println("passivateObject");
}
@Override
public boolean validateObject(PooledObject<RestHighLevelClient> 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 {
// 對象池配置類,不寫也可以,采用默認(rèn)配置
private static GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig();
// 采用默認(rèn)配置maxTotal是8,池中有8個client
static {
poolConfig.setMaxTotal(8);
}
// 要池化的對象的工廠類,這個是我們要實現(xiàn)的類
private static EsClientPoolFactory esClientPoolFactory = new EsClientPoolFactory();
// 利用對象工廠類和配置類生成對象池
private static GenericObjectPool<RestHighLevelClient> 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集群操作就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java中instanceOf關(guān)鍵字的用法及特性詳解
當(dāng)我們在進(jìn)行向下轉(zhuǎn)型時,如果兩個對象之間沒有直接或間接的繼承關(guān)系,在轉(zhuǎn)換時有可能會產(chǎn)生強制類型轉(zhuǎn)換異常,我們可以使用java中自帶的instanceOf關(guān)鍵字來解決這個問題,所以本篇文章,會帶大家學(xué)習(xí)instanceOf的用法及特性,需要的朋友可以參考下2023-05-05
SpringBoot響應(yīng)Json數(shù)據(jù)亂碼通過配置的解決
這篇文章主要介紹了SpringBoot響應(yīng)Json數(shù)據(jù)亂碼通過配置的解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11
Java?Web開發(fā)中的分頁與參數(shù)校驗舉例詳解
這篇文章主要介紹了JavaWeb開發(fā)中的分頁設(shè)計和參數(shù)校驗,分頁設(shè)計通過分頁查詢參數(shù)優(yōu)化查詢性能,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-02-02
eclipse/intellij idea 遠(yuǎn)程調(diào)試hadoop 2.6.0
這篇文章主要介紹了eclipse/intellij idea 遠(yuǎn)程調(diào)試hadoop 2.6.0的相關(guān)資料,需要的朋友可以參考下2016-07-07
JAVA下單接口優(yōu)化實戰(zhàn)TPS性能提高10倍
今天小編就為大家分享一篇關(guān)于JAVA下單接口優(yōu)化實戰(zhàn)TPS性能提高10倍,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-12-12
實戰(zhàn)分布式醫(yī)療掛號系統(tǒng)開發(fā)醫(yī)院科室及排班的接口
這篇文章主要為大家介紹了實戰(zhàn)分布式醫(yī)療掛號系統(tǒng)開發(fā)醫(yī)院科室及排班的接口,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪<BR>2022-04-04

