分布式搜索 Elasticsearch —— 删除索引
2016-12-16 13:50
253 查看
删除索引的方式很多,这里列举三种。
指定 index 、type、id 执行删除
使用 Bulk 执行批量操作
根据条件删除匹配的索引
第一种 和 第二种 需要知道 索引的ID后方可执行删除,局限性较大,第三种根据条件删除匹配索引,也比比较简单。
指定 index 、type、id 执行删除
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; 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 * @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 执行批量操作
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; 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("+++++++++++++++++++++++++++++++++++++++++++++++++++"); } } } }
根据条件删除匹配的索引
QueryBuild qb = QueryBuilders.matchAllQuery(); client.prepareDeleteQuery(indeices).setQuery(qb).execute();
第一种 和 第二种 需要知道 索引的ID后方可执行删除,局限性较大,第三种根据条件删除匹配索引,也比比较简单。
相关文章推荐
- 分布式搜索elasticsearch java API 之(四)------删除索引数据
- 分布式搜索elasticsearch java API 之(六)------批量添加删除索引
- 分布式搜索elasticsearch java API 之(四)------删除索引数据
- 分布式搜索elasticsearch java API 之(六)------批量添加删除索引
- 分布式搜索elasticsearch java API 之(三)(四)------索引数据、删除索引数据
- 分布式搜索elasticsearch java API 之(六)------批量添加删除索引
- 分布式搜索elasticsearch java API 之(二)------put Mapping定义索引字段属性
- 分布式搜索elasticsearch java API 之(三)------索引数据
- 分布式搜索elasticsearch 索引文档的增删改查(RESTful)
- 分布式搜索elasticsearch 索引文档的增删改查 入门
- 分布式搜索elasticsearch------索引修复
- 分布式搜索elasticsearch java API 之(二)------put Mapping定义索引字段属性
- 分布式搜索elasticsearch------索引修复
- 分布式搜索elasticsearch 索引文档的增删改查 入门
- 分布式搜索elasticsearch 索引文档的增删改查 入门
- 分布式搜索elasticsearch 索引文档的增删改查 入门
- 分布式搜索elasticsearch 索引文档的增删改查 入门
- ElasticSearch封装(创建索引,删除索引,创建Mapping,批量插入,批量删除,搜索)
- ElasticSearch封装(创建索引,删除索引,创建Mapping,批量插入,批量删除,搜索)
- 分布式搜索elasticsearch java API 之(二)------put Mapping定义索引字段属性