ElasticSearch工具类
import org.elasticsearch.action.admin.indices.create.CreateIndexResponse;
import org.elasticsearch.action.admin.indices.exists.indices.IndicesExistsResponse;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.support.master.AcknowledgedResponse;
import org.elasticsearch.client.IndicesAdminClient;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.TransportAddress;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import java.net.InetAddress;
import java.net.UnknownHostException;
public class ESUtil {
//集群名,默认值elasticsearch
private static final String CLUSTER_NAME = "elasticsearch";
//ES集群中某个节点
private static final String HOSTNAME = "node1";
//连接端口号
private static final int TCP_PORT = 9300;
//构建Settings对象
private static Settings settings = Settings.builder().put("cluster.name", CLUSTER_NAME).build();
//TransportClient对象,用于连接ES集群
private static volatile TransportClient client;
/**
* 同步synchronized(*.class)代码块的作用和synchronized static方法作用一样,
* 对当前对应的*.class进行持锁,static方法和.class一样都是锁的该类本身,同一个监听器
* @return
* @throws UnknownHostException
*/
public static TransportClient getClient(){
if(client==null){
synchronized (TransportClient.class){
try {
client=new PreBuiltTransportClient(settings)
.addTransportAddress(new TransportAddress(InetAddress.getByName(HOSTNAME), TCP_PORT));
} catch (UnknownHostException e) {
e.printStackTrace();
}
}
}
return client;
}
/**
* 获取索引管理的IndicesAdminClient
*/
public static IndicesAdminClient getAdminClient() {
return getClient().admin().indices();
}
/**
* 判定索引是否存在
* @param indexName
* @return
*/
public static boolean isExists(String indexName){
IndicesExistsResponse response=getAdminClient().prepareExists(indexName).get();
return response.isExists()?true:false;
}
/**
* 创建索引
* @param indexName
* @return
*/
public static boolean createIndex(String indexName){
CreateIndexResponse createIndexResponse = getAdminClient()
.prepareCreate(indexName.toLowerCase())
.get();
return createIndexResponse.isAcknowledged()?true:false;
}
/**
* 创建索引
* @param indexName 索引名
* @param shards 分片数
* @param replicas 副本数
* @return
*/
public static boolean createIndex(String indexName, int shards, int replicas) {
Settings settings = Settings.builder()
.put("index.number_of_shards", shards)
.put("index.number_of_replicas", replicas)
.build();
CreateIndexResponse createIndexResponse = getAdminClient()
.prepareCreate(indexName.toLowerCase())
.setSettings(settings)
.execute().actionGet();
return createIndexResponse.isAcknowledged()?true:false;
}
/**
* 位索引indexName设置mapping
* @param indexName
* @param typeName
* @param mapping
*/
public static void setMapping(String indexName, String typeName, String mapping) {
getAdminClient().preparePutMapping(indexName)
.setType(typeName)
.setSource(mapping, XContentType.JSON)
.get();
}
/**
* 删除索引
* @param indexName
* @return
*/
public static boolean deleteIndex(String indexName) {
// DeleteResponse response = client.prepareDelete("twitter", "_doc", "1").get();
// DeleteResponse deleteResponse = getAdminClient()
// .prepareDelete(indexName.toLowerCase())
// .get();
// DeleteResponse response = getAdminClient().prepareDelete(indexName).get();
AcknowledgedResponse response = getAdminClient().prepareDelete(indexName).get();
// DeleteResponse response = getClient().prepareDelete().get();
return response.isAcknowledged()?true:false;
}
}