Допустим, если мы прокручиваем документ с большим индексом (скажем,> 50M) и один из запросов после прокрутки 99% документов завершается с ошибкой, похоже, что мы должны начать все сначала, что чертовски дорого ичувствует себя неэффективным.
Для прокрутки я использую нарезанную прокрутку
public void creatSlicedScroll(String index, String type){
ClusterSearchShardsResponse clusterSearchShardsResponse =
searchShard(index,type);
int slices = clusterSearchShardsResponse.getGroups().length;
int scrollSize = 10;
IntStream.range(1, slices).parallel().forEach(i -> {
//prepare search
SliceBuilder sliceBuilder = new SliceBuilder(i, slices);
SearchResponse scrollResponse =
client.prepareSearch(index).setTypes(type)
.setScroll("1m")
.slice(sliceBuilder)
.setSize(scrollSize)
.setFetchSource("id", null).
get();
fetchScroll(scrollResponse);
});
}
public void fetchScroll(SearchResponse scrollResp){
//Scroll until no hits are returned
do {
for (SearchHit hit : scrollResp.getHits().getHits()) {
//Fields Object for each document
Map<String, SearchHitField> responseFields = hit.getFields();
System.out.println(responseFields.toString());
}
scrollResp = client.prepareSearchScroll(
scrollResp.getScrollId())
.setScroll("1m")
.execute()
.actionGet();
} while(scrollResp.getHits().getHits().length != 0); // Zero hits mark the end of the scroll and the while loop.
}
Пожалуйста, предложите, как обработать этот сценарий сбоя.Согласно документации, scrollcontext остается активным до указанного времени, указанного во время запроса.Рассмотрим случай, когда произошел сбой сети, и контекст прокрутки предназначен для 2M, и программа прочитала около 50% данных.Как возобновить с 50% до 100%