Je suis nouveau à ElasticsearchTemplate. Je veux obtenir 1000 documents d'Elasticsearch en fonction de ma requête. J'ai utilisé QueryBuilder pour créer ma requête, et cela fonctionne parfaitement. J'ai parcouru les liens suivants, qui indiquent qu'il est possible de réaliser de gros ensembles de données en utilisant scan et scroll.
link one
link twoElasticsearchTemplate récupère de gros ensembles de données
Je suis en train de mettre en œuvre cette fonctionnalité dans la section suivante du code, que j'ai une copie collée de l'un des liens, mentionné ci-dessus. Mais je reçois l'erreur suivante:
The type ResultsMapper is not generic; it cannot be parameterized with arguments <myInputDto>.
MyInputDto
est une classe avec l'annotation @Document
dans mon projet. Fin de la journée, je veux juste récupérer 1000 documents d'Elasticsearch. J'ai essayé de trouver le paramètre size
mais je pense que ce n'est pas supporté.
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;
}
}
Quel est le problème ici? Existe-t-il d'autres alternatives pour y parvenir? Je serais reconnaissant si quelqu'un pouvait me dire comment cela (code) fonctionne dans le backend.