如何使用RestHighLevelClient在Elasticsearch中从索引中删除所有文档

时间:2018-10-29 07:44:38

标签: elasticsearch elasticsearch-6 elasticsearch-java-api

我尝试了下面的代码,它可以正常工作,但它使用 TransportClient 删除所有文档。

@section('content')

我正在使用 elasticsearch 6.1.4 。 使用 RestHighLevelClient 从索引中删除所有文档的方法是什么。

2 个答案:

答案 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的问题。

Delete APIBulkRequest

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