Как добиться множественного удаления из клиента высокого уровня rest 6.2.4?

#spring #elasticsearch

#spring #elasticsearch

Вопрос:

Следующий код работает только для ElasticSearchClient. Я хочу использовать RestHighLevelClient версии 6.2.4.

 BulkByScrollResponse response = 
    DeleteByQueryAction.INSTANCE.newRequestBuilder(restClient)
                       .source("persons")
                       .get();
            long deleted = response.getDeleted();
  

Ответ №1:

API-интерфейс удаления с помощью запроса поддерживается только в RestHighLevelClient начиная с версии 6.5 и выше.

Однако, если вы используете 6.2.4, вы все равно можете вызвать _delete_by_query конечную точку, используя низкоуровневый клиент:

 Response response = restClient.performRequest("POST", "/persons/_delete_by_query"); 
String jsonResponse = EntityUtils.toString(response.getEntity());
// parse the JSON and do something
  

Если вам нужно передать запрос, вы можете сделать это следующим образом:

 Map<String, String> params = Collections.emptyMap();
String jsonString = "{ "query": { "range" : { "age" : { "gte" : 10 } } } }";
HttpEntity query = new NStringEntity(jsonString, ContentType.APPLICATION_JSON);

Response response = restClient.performRequest("POST", "/persons/_delete_by_query", params, query); 
String jsonResponse = EntityUtils.toString(response.getEntity());
// parse the JSON and do something
  

Комментарии:

1. отличное предложение, я довольно новичок в elastic search: не могли бы вы, пожалуйста, сообщить мне, как передать{ «query»: { «range»: { «age»: { «gte»: 10 } } }} в вашем ответе. также обратите внимание, что у меня будет массив индексов и gte dte

2. Большое спасибо за то, что сделали это так просто для меня.

3. У меня есть еще один вопрос: что, если бы у меня было несколько индексов для удаления, как я могу использовать список индексов?

4. просто замените persons на persons,index2,index3,etc

5. Пожалуйста, задайте новый вопрос