Как удалить все документы из индекса в elasticsearch с помощью RestHighLevelClient

Я пробовал приведенный ниже код, он работает нормально, но использует TransportClient для удаления всех документов.

DeleteByQueryRequestBuilder deleteByQueryRequestBuilder = DeleteByQueryAction.INSTANCE.newRequestBuilder(transportClient)
                 .filter(QueryBuilders.matchAllQuery())
                 .source(indexName);
         BulkByScrollResponse response = deleteByQueryRequestBuilder
                .filter(QueryBuilders.matchAllQuery()).get()

Я использую elasticsearch 6.1.4. Как удалить все документы из индекса с помощью RestHighLevelClient.


person vishal munjani    schedule 29.10.2018    source источник
comment
Он будет поддерживаться начиная с ES 6.5.0: github.com/elastic/elasticsearch/pull/32782   -  person Val    schedule 29.10.2018


Ответы (2)


Я использую elasticsearch 6.5.4. В этом фрагменте я использую клиент RestHighLevelClient.

DeleteByQueryRequest request = new DeleteByQueryRequest(indexName);
request.setQuery(QueryBuilders.matchAllQuery());
BulkByScrollResponse response = client.deleteByQuery(request, RequestOptions.DEFAULT);

У класса RestHighLevelClient есть метод deleteByQuery, которому нужен запрос. В этом запросе вы можете определить нужные вам фильтры.

Дополнительную информацию можно найти на здесь.

person Axel    schedule 09.01.2019
comment
Не могли бы вы пояснить свой ответ? - person executable; 09.01.2019

Если кому-то интересно, как удалить список документов по идентификатору, с RestHighLevelClient можно использовать следующий подход. Я столкнулся с этой проблемой и не смог найти никаких полезных ресурсов, поэтому здесь я публикую свой ответ, который напрямую не отвечает на вопрос OP.

Удалить 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);
    }
}
person Cnf271    schedule 17.01.2020