HighLevelApi For ElasticSearch 查詢超過 10000 筆

HighLevelApiForElasticSearch 查詢超過10000筆作法

這篇介紹HighLevelApiForElasticSearch 查詢超過10000筆作法。

Example

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
public static List<Detail> getDetail(String userId) {
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();

boolQueryBuilder.filter(QueryBuilders.termQuery("userId", userId));

sourceBuilder.query(boolQueryBuilder);
sourceBuilder.size(ELKManager.MAX_REQUEST_SIZE);

List<Detail> details = new ArrayList<Detail>();

Object[] sortValues = null;
SearchHit[] searchHits;
do {
if (sortValues != null) {
sourceBuilder.searchAfter(sortValues);
}

SearchResponse searchResponse = ELKManager.search(sourceBuilder, INDEX_NAME_PREFIX + "*");
searchHits = searchResponse.getHits().getHits();
if (searchHits.length > 0) {
Iterator<SearchHit> iterator = searchResponse.getHits().iterator();
while (iterator.hasNext()) {
Detail detail = new Detail();
Map<String, Object> result = iterator.next().getSourceAsMap();
detail.setUserId((String) result.get("userId"));
detail.setPassWord((String) result.get("passWord"));
}

sortValues = searchResponse.getHits().getAt(searchHits.length - 1).getSortValues();
}
} while (searchHits.length > 0);

return details;
}