- 介绍
- 1. 前言
- 2. 项目元数据
- 3. 使用条件
- 4. 玩转Spring Data Repositories
- 5. Elasticsearch Repositories
- 6. 附录
- 本书使用 GitBook 发布
README
利用Scan和Scroll处理大结果集
Elasticsearch在处理大结果集时可以使用scan和scroll。在Spring Data Elasticsearch中,可以向下面那样使用ElasticsearchTemplate来使用scan和scroll处理大结果集。
Example 39. Using Scan and Scroll(使用scan和scroll)
SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()).withIndices("test-index").withTypes("test-type").withPageable(new PageRequest(0,1)).build();String scrollId = elasticsearchTemplate.scan(searchQuery,1000,false);List<SampleEntity> sampleEntities = new ArrayList<SampleEntity>();boolean hasRecords = true;while (hasRecords){Page<SampleEntity> page = elasticsearchTemplate.scroll(scrollId, 5000L , new ResultsMapper<SampleEntity>(){@Overridepublic Page<SampleEntity> mapResults(SearchResponse response) {List<SampleEntity> chunk = new ArrayList<SampleEntity>();for(SearchHit searchHit : response.getHits()){if(response.getHits().getHits().length <= 0) {return null;}SampleEntity user = new SampleEntity();user.setId(searchHit.getId());user.setMessage((String)searchHit.getSource().get("message"));chunk.add(user);}return new PageImpl<SampleEntity>(chunk);}});if(page != null) {sampleEntities.addAll(page.getContent());hasRecords = page.hasNextPage();}else{hasRecords = false;}}}
