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; }
|