25.1 判定索引是否存在
package cn.hadron
import org.elasticsearch.action.admin.indices.exists.indices.IndicesExistsResponse
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.transport.client.PreBuiltTransportClient
import java.net.InetAddress
import java.net.UnknownHostException
public class ExistsDemo {
public static void main(String[] args) throws UnknownHostException {
//1.设置集群名称
Settings settings = Settings.builder().put("cluster.name", "elasticsearch").build()
//2.创建client
TransportClient client = new PreBuiltTransportClient(settings)
.addTransportAddress(new TransportAddress(InetAddress.getByName("node1"), 9300))
//3.获取IndicesAdminClient对象
IndicesAdminClient indicesAdminClient = client.admin().indices()
//4.判定索引是否存在
IndicesExistsResponse response=indicesAdminClient.prepareExists("index1").get()
System.out.println(response.isExists())
}
}
执行结果
no modules loaded
loaded plugin [org.elasticsearch.index.reindex.ReindexPlugin]
loaded plugin [org.elasticsearch.join.ParentJoinPlugin]
loaded plugin [org.elasticsearch.percolator.PercolatorPlugin]
loaded plugin [org.elasticsearch.script.mustache.MustachePlugin]
loaded plugin [org.elasticsearch.transport.Netty4Plugin]
false
Process finished with exit code 0

25.2 创建索引
package cn.hadron
import org.elasticsearch.action.admin.indices.create.CreateIndexResponse
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.transport.client.PreBuiltTransportClient
import java.net.InetAddress
import java.net.UnknownHostException
public class CreateDemo {
public static void main(String[] args) throws UnknownHostException {
//1.设置集群名称
Settings settings = Settings.builder().put("cluster.name", "elasticsearch").build()
//2.创建client
TransportClient client = new PreBuiltTransportClient(settings)
.addTransportAddress(new TransportAddress(InetAddress.getByName("node1"), 9300))
//3.获取IndicesAdminClient对象
IndicesAdminClient indicesAdminClient = client.admin().indices()
//4.创建索引
CreateIndexResponse ciReponse=indicesAdminClient.prepareCreate("index1").get()
System.out.println(ciReponse.isAcknowledged())
}
}
执行结果
no modules loaded
loaded plugin [org.elasticsearch.index.reindex.ReindexPlugin]
loaded plugin [org.elasticsearch.join.ParentJoinPlugin]
loaded plugin [org.elasticsearch.percolator.PercolatorPlugin]
loaded plugin [org.elasticsearch.script.mustache.MustachePlugin]
loaded plugin [org.elasticsearch.transport.Netty4Plugin]
true
Process finished with exit code 0

25.3 封装工具类
ElasticSearch工具类
package cn.hadron.es;
import org.elasticsearch.action.admin.indices.create.CreateIndexResponse;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexResponse;
import org.elasticsearch.action.admin.indices.exists.indices.IndicesExistsResponse;
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 {
private static final String CLUSTER_NAME = "elasticsearch";
private static final String HOSTNAME = "node1";
private static final int TCP_PORT = 9300;
private static Settings settings = Settings.builder().put("cluster.name", CLUSTER_NAME).build();
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) {
DeleteIndexResponse deleteResponse = getAdminClient()
.prepareDelete(indexName.toLowerCase())
.execute()
.actionGet();
return deleteResponse.isAcknowledged()?true:false;
}
}
测试程序
package cn.hadron
import cn.hadron.es.*
import org.elasticsearch.common.xcontent.XContentBuilder
import java.io.IOException
import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder
public class ESUtilDemo {
public static void main(String[] args) {
//1.判定索引是否存在
boolean flag=ESUtil.isExists("index1")
System.out.println("isExists:"+flag)
//2.创建索引
flag=ESUtil.createIndex("index1", 3, 0)
System.out.println("createIndex:"+flag)
//3.设置Mapping
try {
XContentBuilder builder = jsonBuilder()
.startObject()
.startObject("properties")
.startObject("id")
.field("type", "long")
.endObject()
.startObject("title")
.field("type", "text")
.field("analyzer", "ik_max_word")
.field("search_analyzer", "ik_max_word")
.field("boost", 2)
.endObject()
.startObject("content")
.field("type", "text")
.field("analyzer", "ik_max_word")
.field("search_analyzer", "ik_max_word")
.endObject()
.startObject("postdate")
.field("type", "date")
.field("format", "yyyy-MM-dd HH:mm:ss")
.endObject()
.startObject("url")
.field("type", "keyword")
.endObject()
.endObject()
.endObject()
System.out.println(builder.string())
ESUtil.setMapping("index1", "blog", builder.string())
} catch (IOException e) {
e.printStackTrace()
}
}
}
执行结果
no modules loaded
loaded plugin [org.elasticsearch.index.reindex.ReindexPlugin]
loaded plugin [org.elasticsearch.join.ParentJoinPlugin]
loaded plugin [org.elasticsearch.percolator.PercolatorPlugin]
loaded plugin [org.elasticsearch.script.mustache.MustachePlugin]
loaded plugin [org.elasticsearch.transport.Netty4Plugin]
isExists:false
createIndex:true
{"properties":{"id":{"type":"long"},"title":{"type":"text","analyzer":"ik_max_word","search_analyzer":"ik_max_word","boost":2},"content":{"type":"text","analyzer":"ik_max_word","search_analyzer":"ik_max_word"},"postdate":{"type":"date","format":"yyyy-MM-dd HH:mm:ss"},"url":{"type":"keyword"}}}
Process finished with exit code 0

通过Kibana查询
GET index1/_mapping
{
"index1": {
"mappings": {
"blog": {
"properties": {
"content": {
"type": "text",
"analyzer": "ik_max_word"
},
"id": {
"type": "long"
},
"postdate": {
"type": "date",
"format": "yyyy-MM-dd HH:mm:ss"
},
"title": {
"type": "text",
"boost": 2,
"analyzer": "ik_max_word"
},
"url": {
"type": "keyword"
}
}
}
}
}
}
|