我是新来ElasticsearchTemplate。 我想根据我的查询从Elasticsearch 1000个文档。 我用的QueryBuilder创建我的查询,并且它可以正常使用。 我已经通过以下链接,其中指出,有可能实现使用扫描和滚动大数据集了。
一个链接
连接两个
我想实现在下面的代码段这个功能,我有一份来自链路的一个贴,上面提到的。 但我得到以下错误:
The type ResultsMapper is not generic; it cannot be parameterized with arguments <myInputDto>.
MyInputDto
是一类@Document
在我的项目注释。 一天结束时,我只是想检索Elasticsearch 1000个文档。 我试图找到size
参数,但我认为这是不支持的。
String scrollId = esTemplate.scan(searchQuery, 1000, false);
List<MyInputDto> sampleEntities = new ArrayList<MyInputDto>();
boolean hasRecords = true;
while (hasRecords) {
Page<MyInputDto> page = esTemplate.scroll(scrollId, 5000L,
new ResultsMapper<MyInputDto>() {
@Override
public Page<MyInputDto> mapResults(SearchResponse response) {
List<MyInputDto> chunk = new ArrayList<MyInputDto>();
for (SearchHit searchHit : response.getHits()) {
if (response.getHits().getHits().length <= 0) {
return null;
}
MyInputDto user = new MyInputDto();
user.setId(searchHit.getId());
user.setMessage((String) searchHit.getSource().get("message"));
chunk.add(user);
}
return new PageImpl<MyInputDto>(chunk);
}
});
if (page != null) {
sampleEntities.addAll(page.getContent());
hasRecords = page.hasNextPage();
} else {
hasRecords = false;
}
}
什么是这里的问题? 是否有任何其他的替代实现这一目标? 我会感激,如果有人能告诉我如何(代码)在后台工作。