使用spring引导批处理从elasticsearch索引读取所有文档

cu6pst1q  于 2021-06-14  发布在  ElasticSearch
关注(0)|答案(0)|浏览(187)

我现在正在尝试创建一个spring引导批处理作业,它从elasticsearch索引中读取所有文档,这样这些文档就可以写入文件系统或其他目的地,如s3或kafka。
我已经找到一个答案张贴之前,但这是不再有效,因为ElasticSearch已删除扫描搜索类型,因为es 3。请参阅:用于elasticsearch扫描和滚动的spring batch itemreader
相反,我们应该使用scroll api。我找到了另一个扩展的 ItemReader :

  1. public class ElasticsearchReader<T> extends AbstractPaginatedDataItemReader<T> implements InitializingBean {
  2. private final ElasticsearchOperations elasticsearchOperations;
  3. private final SearchQuery query;
  4. private final Class<? extends T> targetType;
  5. public ElasticsearchReader(ElasticsearchOperations elasticsearchOperations, SearchQuery query, Class<? extends T> targetType) {
  6. this.elasticsearchOperations = elasticsearchOperations;
  7. this.query = query;
  8. this.targetType = targetType;
  9. }
  10. @Override
  11. public void afterPropertiesSet() throws Exception {
  12. state(elasticsearchOperations != null, "An ElasticsearchOperations implementation is required.");
  13. state(query != null, "A query is required.");
  14. state(targetType != null, "A target type to convert the input into is required.");
  15. }
  16. @Override
  17. @SuppressWarnings("unchecked")
  18. protected Iterator<T> doPageRead() {
  19. return (Iterator<T>)elasticsearchOperations.queryForList(query, targetType).iterator();
  20. }
  21. }

但是这个似乎没有使用scrollapi,而是使用默认分页。有人知道如何扩展阅读器来使用es scroll api吗?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题