我尝试了下面的代码,它可以正常工作,但它使用 TransportClient 删除所有文档。
@section('content')
我正在使用 elasticsearch 6.1.4 。 使用 RestHighLevelClient 从索引中删除所有文档的方法是什么。
答案 0 :(得分:1)
我正在使用Elasticsearch 6.5.4。在此代码段中,我使用客户端RestHighLevelClient。
DeleteByQueryRequest request = new DeleteByQueryRequest(indexName);
request.setQuery(QueryBuilders.matchAllQuery());
BulkByScrollResponse response = client.deleteByQuery(request, RequestOptions.DEFAULT);
类 RestHighLevelClient
具有需要请求的方法 deleteByQuery 。在此请求中,您可以定义所需的过滤器。
您可以找到更多信息here.
答案 1 :(得分:0)
如果有人想知道如何通过ID删除文档列表,则可以对RestHighLevelClient使用以下方法。我遇到了这个问题,找不到任何有用的资源,因此,我在这里发布我的答案,该答案不能直接回答OP的问题。
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);
}
}