Необходимо прочитать данные из ES 1.7 для индексации до 6.7.Поскольку нет доступных обновлений.Необходимо проиндексировать почти 5 ТБ данных на 200 миллионов записей.Мы используем ES_REST_high_level_client (6.7.2), используя подход поиска и прокрутки.но не в состоянии прокрутить, используя идентификатор прокрутки.и другой подход попробовал использовать от и размер партии.Первоначально чтение происходит быстрее, так как увеличение со смещением действительно плохо.Что лучше всего сделать.
1-й подход с использованием поиска и прокрутки.
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.size(10);
searchRequest.source(searchSourceBuilder);
searchRequest.scroll(TimeValue.timeValueMinutes(2));
SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
String scrollId = searchResponse.getScrollId();
while (run) {
SearchScrollRequest scrollRequest = new SearchScrollRequest(scrollId);
scrollRequest.scroll(TimeValue.timeValueSeconds(60));
SearchResponse searchScrollResponse = client.scroll(scrollRequest, RequestOptions.DEFAULT);
scrollId = searchScrollResponse.getScrollId();
hits = searchScrollResponse.getHits();
if (hits.getHits().length == 0) {
run = false;
}
}
Исключение Исключение в потоке "main" ElasticsearchStatusException [Исключение Elasticsearch [тип = исключение, причина = ElasticsearchIllegalArgumentException [Не удалось декодировать scrollId];nested: IOException [Неверный ввод Base64 десятичного знака 123 в позиции массива 0];]] в org.elasticsearch.rest.BytesRestResponse.errorFromXContent (BytesRestResponse.java:177) в org.elasticsearch.client.RestHighLevelClient.parseEntity (RestHighLevelClient.javalevel.lip.: 2026):
2-й подход:
int offset = 0;
boolean run = true;
while (run) {
SearchRequest searchRequest = new SearchRequest("indexname");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.from(offset);
searchSourceBuilder.size(500);
searchRequest.source(searchSourceBuilder);
long start = System.currentTimeMillis();
SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
long end = System.currentTimeMillis();
SearchHits hits = searchResponse.getHits();
System.out.println(" Total hits : " + hits.totalHits + " time : " + (end - start));
offset += 500;
if(hits.getHits().length == 0) {
run = false;
}
}
Любой другой подход для чтения данных.