分布式搜索Elasticsearch——删除指定索引
2013-05-17 15:49
316 查看
删除索引的方式很多,这里列举三种。
第一种是指定index、type、id执行删除,示例代码如下:
第二种则使用Bulk执行批量操作,代码如下所示:
第一二种方案,要求你先知道要删除的索引的ID后,方可执行删除,这种方案的局限性较大。
第三种方案则较简单,即根据条件删除匹配的索引,如下所示:
第一种是指定index、type、id执行删除,示例代码如下:
/** * @author Geloin */ package com.gsoft.gsearch.util; import org.elasticsearch.action.get.GetResponse; import org.junit.Test; import com.gsoft.gsearch.BaseTest; import com.gsoft.gsearch.entity.Person; /** * @author Geloin * */ public class DeleteTest extends BaseTest { @Test public void delete() { try { String id = "1234567890"; Person p = new Person(); p.setId(id); p.setAge(20); p.setIsStudent(false); p.setSex("男"); p.setName("张三的车"); String source = ElasticSearchUtil.BeanToJson(p); // 创建索引 client.prepareIndex(index, type, id).setSource(source).execute(); System.out.println("休息6秒钟,以便创建索引"); Thread.sleep(6000); // Get System.out.println("================================第一次Get"); showById(id); client.prepareDelete(index, type, id).execute(); System.out.println("休息6秒钟,以便删除索引"); Thread.sleep(6000); System.out.println("================================第二次Get"); showById(id); } catch (Exception e) { e.printStackTrace(); } finally { if (null != client) { client.close(); } if (null != node) { node.close(); } } } /** * 根据ID查询,使用Get * * @author Geloin * @param id * @throws Exception */ private void showById(String id) throws Exception { GetResponse response = client.prepareGet(index, type, id).execute() .actionGet(); String json = response.getSourceAsString(); if (null != json) { Person newPerson = mapper.readValue(json, Person.class); System.out.println("id\t\t" + newPerson.getId()); System.out.println("name\t\t" + newPerson.getName()); System.out.println("sex\t\t" + newPerson.getSex()); System.out.println("age\t\t" + newPerson.getAge()); System.out.println("isStudent\t\t" + newPerson.getIsStudent()); } else { log.info("未查询到任何结果!"); } } }
第二种则使用Bulk执行批量操作,代码如下所示:
/** * @author Geloin */ package com.gsoft.gsearch.util; import org.elasticsearch.action.bulk.BulkRequestBuilder; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.index.query.QueryBuilder; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.search.SearchHit; import org.elasticsearch.search.SearchHits; import org.junit.Test; import com.gsoft.gsearch.BaseTest; import com.gsoft.gsearch.entity.Person; /** * @author Geloin * */ public class BulkDeleteTest extends BaseTest { @Test public void delete() { try { String id = "1234567890"; BulkRequestBuilder builder1 = client.prepareBulk(); for (int i = 0; i < 5; i++) { String myId = id + "_" + i; Person p = new Person(); p.setId(myId); p.setAge(20); p.setIsStudent(false); p.setSex("男"); p.setName("张三的车"); String source = ElasticSearchUtil.BeanToJson(p); // 创建索引 builder1.add(client.prepareIndex(index, type, myId) .setSource(source).request()); } builder1.execute(); System.out.println("休息6秒钟,以便创建索引"); Thread.sleep(6000); // Get System.out.println("================================第一次查询"); query(); BulkRequestBuilder builder = client.prepareBulk(); for (int i = 0; i < 5; i++) { String myId = id + "_" + i; builder.add(client.prepareDelete(index, type, myId) .request()); } builder.execute(); System.out.println("休息6秒钟,以便删除索引"); Thread.sleep(6000); System.out.println("================================第二次查询"); query(); } catch (Exception e) { e.printStackTrace(); } finally { if (null != client) { client.close(); } if (null != node) { node.close(); } } } private void query() throws Exception { // 检索 QueryBuilder qb = QueryBuilders.matchPhraseQuery("name", "张三的车"); SearchResponse searchResponse = client.prepareSearch(index) .setTypes(type).setQuery(qb).setFrom(0).setSize(12).execute() .actionGet(); SearchHits hits = searchResponse.getHits(); if (null == hits || hits.totalHits() == 0) { log.error("使用\"张三的车\"没有查询到任何结果!"); } else { for (SearchHit hit : hits) { String json = hit.getSourceAsString(); Person newPerson = mapper.readValue(json, Person.class); System.out.println("id\t\t" + newPerson.getId()); System.out.println("name\t\t" + newPerson.getName()); System.out.println("sex\t\t" + newPerson.getSex()); System.out.println("age\t\t" + newPerson.getAge()); System.out.println("isStudent\t\t" + newPerson.getIsStudent()); System.out .println("+++++++++++++++++++++++++++++++++++++++++++++++++++"); } } } }
第一二种方案,要求你先知道要删除的索引的ID后,方可执行删除,这种方案的局限性较大。
第三种方案则较简单,即根据条件删除匹配的索引,如下所示:
QueryBuilder qb = QueryBuilders.matchAllQuery(); client.prepareDeleteByQuery(indeices).setQuery(qb).execute();
相关文章推荐
- 分布式搜索Elasticsearch——批量创建索引
- 开源分布式搜索平台ELK(Elasticsearch+Logstash+Kibana)入门学习资源索引
- 开源分布式搜索平台ELK(Elasticsearch+Logstash+Kibana)入门学习资源索引
- (转)开源分布式搜索平台ELK(Elasticsearch+Logstash+Kibana)入门学习资源索引
- 分布式搜索Elasticsearch——创建索引
- 开源分布式搜索平台ELK(Elasticsearch+Logstash+Kibana)入门学习资源索引
- elasticsearch之删除索引
- 分布式搜索elasticsearch java API 之(三)(四)------索引数据、删除索引数据
- 分布式搜索Elasticsearch——QueryBuilders.matchQuery
- 分布式搜索Elasticsearch——配置
- 分布式搜索 Elasticsearch —— 删除索引
- 分布式搜索Elasticsearch——QueryBuilders.matchAllQuery
- 分布式搜索Elasticsearch——QueryBuilders.termQuery
- 分布式搜索Elasticsearch——QueryBuilders.matchPhrasePrefixQuery
- [搜索]ElasticSearch Java Api(一) -创建索引
- .NET 分布式 搜索 elasticsearch.net NEST
- 分布式搜索elasticsearch java API 之(六)------批量添加删除索引
- 分布式搜索Elasticsearch——概述
- 分布式搜索Elasticsearch——搜索(一)
- ElasticSearch Java Api(四) -删除索引