【问题标题】:How to delete all documents from index in an elasticsearch using RestHighLevelClient如何使用 RestHighLevelClient 从弹性搜索中的索引中删除所有文档
【发布时间】:2018-10-29 07:44:38
【问题描述】:
我尝试了下面的代码,它工作正常,但它使用 TransportClient 删除所有文档。
DeleteByQueryRequestBuilder deleteByQueryRequestBuilder = DeleteByQueryAction.INSTANCE.newRequestBuilder(transportClient)
.filter(QueryBuilders.matchAllQuery())
.source(indexName);
BulkByScrollResponse response = deleteByQueryRequestBuilder
.filter(QueryBuilders.matchAllQuery()).get()
我正在使用 elasticsearch 6.1.4。
使用 RestHighLevelClient 从索引中删除所有文档的方法是什么。
【问题讨论】:
标签:
elasticsearch
elasticsearch-6
elasticsearch-java-api
【解决方案1】:
我正在使用弹性搜索 6.5.4。在这个 sn-p 中,我使用客户端 RestHighLevelClient。
DeleteByQueryRequest request = new DeleteByQueryRequest(indexName);
request.setQuery(QueryBuilders.matchAllQuery());
BulkByScrollResponse response = client.deleteByQuery(request, RequestOptions.DEFAULT);
RestHighLevelClient 类具有需要请求的方法 deleteByQuery。在这个请求中,您可以定义您需要的过滤器。
您可以找到更多信息here.
【解决方案2】:
如果有人想知道如何按 id 删除文档列表,可以将以下方法与 RestHighLevelClient 一起使用。我遇到了这个问题并且找不到任何有用的资源,因此我在这里发布我的答案,它不直接回答 OP 的问题。
Delete API 与 BulkRequest
public void deleteIndexes() {
List<String> websitePageList = new ArrayList<>();
websitePageList.add("3123123123"); //Test Data
websitePageList.add("8756785678");
websitePageList.add("9673563456");
if (websitePageList != null && !websitePageList.isEmpty()) {
BulkRequest request = new BulkRequest();
websitePageList.forEach(pageId -> request.add(new DeleteRequest("content", pageId))); //Where content is index & pageId is Document Id
ActionListener<BulkResponse> listener = new ActionListener<BulkResponse>() {
@Override
public void onResponse(BulkResponse bulkItemResponses) {
long deleted = bulkItemResponses.getItems().length;
LOG.info("Deleted documents : " + deleted);
}
@Override
public void onFailure(Exception e) {
LOG.error("Index has not been correctly removed");
}
};
client.bulkAsync(request, RequestOptions.DEFAULT, listener);
}
}