我是 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;
}
}
这里有什么问题?有没有其他选择可以实现这一目标?如果有人能告诉我这个(代码)在后端是如何工作的,我将不胜感激。