您的位置:首页 > 其它

分布式搜索 Elasticsearch —— 删除索引

2016-12-16 13:50 253 查看
删除索引的方式很多,这里列举三种。

指定 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后方可执行删除,局限性较大,第三种根据条件删除匹配索引,也比比较简单。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐