我是ElasticsearchTemplate的新手。我想根據我的查詢從Elasticsearch獲取1000個文檔。 我已經使用QueryBuilder創建我的查詢,並且它工作正常。 我已經通過以下鏈接,其中指出可以使用掃描和滾動來實現大數據集。
link one
link twoElasticsearchTemplate檢索大數據集
我想實現在下面的代碼段這個功能,我有一份來自鏈路的一個貼,上面提到的。 但我收到以下錯誤:
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;
}
}
這裏有什麼問題? 有沒有其他的選擇來實現這一目標? 如果有人能告訴我這個(代碼)是如何在後端工作的,我會很感激。