当前位置: 首页 > 面试题库 >

如何清除ElasticSearch索引?

公羊宗清
2023-03-14
问题内容

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

我的想法是在每次测试之前有一个空的搜索索引。因此,我正在尝试删除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<String> 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)在它之后添加了它。如您所见,我尝试几次打开/关闭连接-在那里没有帮助。

这个问题有时需要更多时间,有时需要5秒钟以上才能删除,有时无法找到刚刚添加的数据(来自先前的测试),等等。而最令人烦恼的是集成测试变得不稳定。Thread.sleep()尽可能将其放置在任何地方似乎不是一个好的解决方案。

是否有任何方法可以 提交 最后的更改,或者进行 锁定 直到写入所有数据?


问题答案:

找到的解决方案:

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();

将新数据放入索引后。



 类似资料:
  • 问题内容: 我知道如何删除整个ElasticSearch索引,但是如何从索引中清除所有文档? 我的动机:我想拥有一个“ ReIndex”方法,该方法可以清除索引的全部内容,以便可以重新加载所有文档。 ElasticSearch语法非常有用。NEST语法会更好。 问题答案: 我在Nest中寻找类似的东西,我想将语法放在这里,以便任何人查看:

  • 问题内容: 我每天创建索引来存储搜索历史,并且我将这些索引用于应用程序中的建议,这也有助于我根据历史建议。 现在我只需要维持过去的10天历史。那么elasticsearch中是否有任何功能可以让我定期创建和删除索引? 问题答案: 我唯一能想到的就是使用数据数学:https : //www.elastic.co/guide/en/elasticsearch/reference/current/dat

  • 当Kubernetes pod进入状态时,您将修复底层问题。你怎么强迫它重新安排?

  • 我想从elasticsearch索引中删除一些数据,而不是完整的索引,我的问题是如何找到所有可用碎片的文档id。对此的查询是什么?? 我使用了以下查询来删除特定文档,但它抛出错误,所以我认为我的文档ID是错误的。请让我知道如何获取可用分片的正确文档ID。 我的数据流是postgresql到logstash到elasticsearch到kibana。但问题是索引大小正在增加很多,它进入GB的内存,而

  • 问题内容: 我的许多日志都以logstash-Year- Week格式编制索引。那就是如果我想删除超过几周的索引,如何在elasticsearch中实现。有没有简单,无缝的方法可以做到这一点? 问题答案: 策展人将是这里的理想之选。您可以在这里找到链接-https: //github.com/elastic/curator 如下所示的命令应该可以正常工作- 您可以将其保留在CRON中,以偶尔删除索

  • 问题内容: 我在Swift 2中使用SFSafariViewController在具有ios 9.1(13B143)的iPad Air 2上显示网页。每个网页都需要用户提供凭据。但是,当用户按下注销按钮时,我需要清除这些凭据。我尝试使用以下方法: 但这不起作用。实际上,“ DELETING CREDENTIAL”和“ DELETING COOKIE”从未打印过。此外,我可以从iPad上完全删除该应