in aliyun-sdk-opensearch/src/main/java/com/aliyun/opensearch/search/DeepPageingIterator.java [70:139]
public boolean hasNext() {
if (null == cursorMark) {
SearchResult searchResult;
try {
searchResult = searcherClient.execute(searchParams);
String result = searchResult.getResult();
JSONObject json = new JSONObject(result);
String status = json.getString("status");
JSONObject resultPart = (JSONObject) json.get("result");
int total = resultPart.getInt("total");
String next_scroll_id = resultPart.getString("scroll_id");
this.remain = total;
if ("OK".equals(status)) {
if (remain == 0) {
LOG.warn("no result found.");
} else {
cursorMark = next_scroll_id;
}
} else {
return false;
}
} catch (Exception e) {
return false;
}
}
if (remain == 0)
return false;
try {
Thread.sleep(this.pagingIntervals);
} catch (InterruptedException e1) {
}
// retrieve current result and perpare for next.
Preconditions.checkNotNull(cursorMark);
searchParams.getDeepPaging().setScrollId(cursorMark);
SearchResult searchResult;
try {
searchResult = searcherClient.execute(searchParams);
String result = searchResult.getResult();
JSONObject json = new JSONObject(result);
String status = json.getString("status");
JSONObject resultPart = (JSONObject) json.get("result");
int total = resultPart.getInt("total");
int num = resultPart.getInt("num");
String next_scroll_id = resultPart.getString("scroll_id");
this.remain = total;
this.next = result;
if ("OK".equals(status)) {
if (remain == 0) {
LOG.warn("no result remain for next paging.");
return false;
} else if (num == 0) {
LOG.warn("result found, but shows nothing.");
return false;
} else {
cursorMark = next_scroll_id;
return true;
}
} else {
remain = -1;
return true;
}
} catch (Exception e) {
throw new IllegalStateException(e.getMessage(), e);
}
}