Я написал код Java для извлечения данных изasticsearch с помощью API RestHighLevelClient.Индекс насчитывает 8576 записей, а общее время заняло 18 секунд.Как я могу оптимизировать код?
HttpHost httpHost = null;
httpHost = new HttpHost(hostName, 9200);
builder = RestClient.builder(httpHost);
RestHighLevelClient client = new RestHighLevelClient(builder);
SearchRequest searchRequest = null;
ArrayList<Map<String, Object>> results;
try {
results = new ArrayList<Map<String, Object>>();
searchRequest = new SearchRequest("4-ml_linreg-2-model-index");
searchRequest.types("4-ml_linreg-2-model-index_type");
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.query(QueryBuilders.matchAllQuery());
sourceBuilder.from(0);
sourceBuilder.size(5000);
searchRequest.scroll(new TimeValue(180000));
searchRequest.source(sourceBuilder);
System.out.println("search start : " + new Date());
response = client.search(searchRequest);
System.out.println("search response : " + new Date());
do {
for (SearchHit hit : response.getHits().getHits()) {
results.add(hit.getSourceAsMap());
}
response = client.searchScroll(new SearchScrollRequest(response.getScrollId()).scroll(new TimeValue(180000)));
System.out.println("scroll response : " + new Date());
} while (response.getHits().getHits().length != 0); // Zero hits mark the end of the scroll and the while loop.
System.out.println("response : " + new Date());
} catch (Exception e) {
System.out.println("Error while processing ES records:: " + e.getMessage());
e.printStackTrace();
}
Ниже приведен вывод консольного кода выше -
начало поиска: ср. 05 июня, 15:47:41 IST 2019
ответ на запрос поиска: ср. 05 июня 15:47:59 IST 2019
ответ прокрутки: ср. 05 июня 15:48:13 IST 2019
ответ прокрутки: ср. 05 июня 15:48:14 IST 2019
ответ: ср. 05 июня 15:48:14 IST 2019