您的位置:首页 > 编程语言 > Java开发

ElasticSearch Java Api(四) -删除索引

2017-02-13 11:33 309 查看
删除可以是删除整个索引库,也可以根据文档id删除索引库下的文档,还可以通过query查询条件删除所有符合条件的数据。


一、删除整个索引库

下面的例子会删除indexName索引:
DeleteIndexResponse dResponse = client.admin().indices().prepareDelete(indexName)
.execute().actionGet();
1
2
1
2

可以根据DeleteIndexResponse对象的
isAcknowledged()
方法判断删除是否成功,返回值为boolean类型. 

如果传人的indexName不存在会出现异常.可以先判断索引是否存在:
IndicesExistsRequest inExistsRequest = new IndicesExistsRequest(indexName);

IndicesExistsResponse inExistsResponse = client.admin().indices()
.exists(inExistsRequest).actionGet();
1
2
3
4
1
2
3
4

根据IndicesExistsResponse对象的isExists()方法的boolean返回值可以判断索引库是否存在.


二、通过ID删除

下面的例子是删除索引名为blog,类型为article,id为1的文档:
DeleteResponse dResponse = client.prepareDelete("blog", "article", "1").execute().actionGet();
1
2
1
2

通过DeleteResponse对象的isFound()方法,可以得到删除是否成功,返回值为boolean类型.


三、通过Query删除

elasticsearch-2.3 中和旧版本api不太一样,安装插件:
sudo bin/plugin install delete-by-query
1
1

集群有多个节点的情况下,每个节点都需要安装并重启. 

如果想要移除插件,可以执行以下命令:
sudo bin/plugin remove delete-by-query
1
1

删除索引名为twitter,类型为tweet,user字段中含有kimchy的所有文档:
DELETE /twitter/tweet/_query?q=user:kimchy
1
1

Java api参考Elasticsearch
Java Api(六)–DeleteByQuery。


四、java demo

package cn.com.bropen.es;

import static org.elasticsearch.index.query.QueryBuilders.termQuery;

import java.net.InetAddress;
import java.net.UnknownHostException;

import org.elasticsearch.action.admin.indices.create.CreateIndexRequest;
import org.elasticsearch.action.admin.indices.create.CreateIndexResponse;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexResponse;
import org.elasticsearch.action.admin.indices.exists.indices.IndicesExistsRequest;
import org.elasticsearch.action.admin.indices.exists.indices.IndicesExistsResponse;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.client.Client;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.index.query.QueryBuilder;

public class ElasticSearchCreate {

private static String ServerIP = "127.0.0.1";// ElasticSearch server ip
private static int ServerPort = 9300;// port
private Client client;

public static void main(String[] args) {

try {
Client client = TransportClient.builder().build().addTransportAddress(
new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9300));

DeleteResponse dResponse = client.prepareDelete("blog", "article", "11").execute()
.actionGet();

if (dResponse.isFound()) {
System.out.println("删除成功");
} else {
System.out.println("删除失败");
}

QueryBuilder qb1 = termQuery("title", "hibernate");

} catch (UnknownHostException e) {
e.printStackTrace();
}

deleteIndex("test");//删除名为test的索引库
}

// 删除索引库

public static void deleteIndex(String indexName) {

try {
if (!isIndexExists(indexName)) {
System.out.println(indexName + " not exists");
} else {
Client client = TransportClient.builder().build().addTransportAddress(
new InetSocketTransportAddress(InetAddress.getByName(ServerIP),
ServerPort));

DeleteIndexResponse dResponse = client.admin().indices().prepareDelete(indexName) .execute().actionGet();
if (dResponse.isAcknowledged()) {
System.out.println("delete index "+indexName+" successfully!");
}else{
System.out.println("Fail to delete index "+indexName);
}
}
} catch (UnknownHostException e) {
e.printStackTrace();
}
}

// 创建索引库
public static void createIndex(String indexName) {
try {
Client client = TransportClient.builder().build().addTransportAddress(
new InetSocketTransportAddress(InetAddress.getByName(ServerIP), ServerPort));

// 创建索引库

if (isIndexExists("indexName")) {
System.out.println("Index " + indexName + " already exits!");
} else {
CreateIndexRequest cIndexRequest = new CreateIndexRequest("indexName");
CreateIndexResponse cIndexResponse = client.admin().indices().create(cIndexRequest)
.actionGet();
if (cIndexResponse.isAcknowledged()) {
System.out.println("create index successfully!");
} else {
System.out.println("Fail to create index!");
}

}

} catch (UnknownHostException e) {
e.printStackTrace();
}

}

// 判断索引是否存在 传入参数为索引库名称
public static boolean isIndexExists(String indexName) {
boolean flag = false;
try {
Client client = TransportClient.builder().build().addTransportAddress(
new InetSocketTransportAddress(InetAddress.getByName(ServerIP), ServerPort));

IndicesExistsRequest inExistsRequest = new IndicesExistsRequest(indexName); IndicesExistsResponse inExistsResponse = client.admin().indices() .exists(inExistsRequest).actionGet();

if (inExistsResponse.isExists()) {
flag = true;
} else {
flag = false;
}

} catch (UnknownHostException e) {
e.printStackTrace();
}

return flag;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息