当前位置:  开发笔记 > 编程语言 > 正文

如何擦除ElasticSearch索引?

如何解决《如何擦除ElasticSearch索引?》经验,为你挑选了3个好方法。

我的单元/集成测试包括搜索功能的测试.

我的想法是在每次测试之前都有空搜索索引.所以,我试图删除setup方法索引中的所有元素(它是Groovy代码):

Client client = searchConnection.client

SearchResponse response = client.prepareSearch("item")
    .setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
    .setQuery(termQuery('name', 'test')) //tried also matchAllQuery()
    .setFrom(0).setSize(100).setExplain(false).execute().actionGet()

List ids = response.hits.hits.collect {
    return it.id
}
client.close()

client = searchConnection.client

ids.each {
    DeleteResponse delete = client.prepareDelete("item", "item", it)
        .setOperationThreaded(false)
        .execute().actionGet()
}

client.close()

似乎它正在异步处理所有删除,所以我Thread.sleep(5000)在它之后添加了.如你所见,我试图打开/关闭连接几次 - 它没有帮助.

有时需要更多时间的问题,有时需要更多的时间来删除,有时它无法找到刚刚添加的数据(来自之前的测试)等等.最令人讨厌的是集成测试变得不稳定.把Thread.sleep()它放在任何可能的地方看起来都不是那么好的解决方案.

有没有办法提交最后的更改,或者锁定直到所有数据都被写入?



1> Igor Artamon..:

找到解决方案

IndicesAdminClient adminClient = searchConnection.client.admin().indices();
String indexName = "location";
DeleteIndexResponse delete = adminClient.delete(new DeleteIndexRequest(indexName)).actionGet()
if (!delete.isAcknowledged()) {
    log.error("Index {} wasn't deleted", indexName);
}

client.admin().indices().flush(new FlushRequest('location')).actionGet();

将新数据放入索引后.



2> johno..:

首先,您不必通过对每个文档ID发出删除来清除所有数据.您可以通过查询匹配所有文档删除所有数据删除所有文件http://www.elasticsearch.org/guide/reference/api/delete-by-query.html说完之后我也不建议这样做,因为它不是建议经常在大型文档集上执行此操作(请参阅docs).

你真正想做的是删除整个索引(它很快)http://www.elasticsearch.org/guide/reference/api/admin-indices-delete-index.html,重新创建它,输入数据,这是重要的是刷新索引以"提交"更改并使其可见.http://www.elasticsearch.org/guide/reference/api/admin-indices-refresh.html

我在测试中这样做,从来没有遇到过问题.


无需刷新,只需调用刷新API以确保搜索最新数据.

3> Karussell..:

    它不是异步调用(您可以添加侦听器并避免actionGet来获取异步调用)

    删除所有项目:

    client.prepareDeleteByQuery(indexName).
                setQuery(QueryBuilders.matchAllQuery()).
                setTypes(indexType).
                execute().actionGet();
    

    刷新索引以查看更改(仅在单元测试中需要)


我的测试表明删除所有项目比重新创建索引更快......
推荐阅读
mobiledu2402852413
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有