spring-data-elasticsearch,Spring Batch,spring Data Elasticsearch" /> spring-data-elasticsearch,Spring Batch,spring Data Elasticsearch" />

Spring batch 用于Elasticsearch扫描和滚动的spring batch ItemReader

Spring batch 用于Elasticsearch扫描和滚动的spring batch ItemReader,spring-batch,spring-data-elasticsearch,Spring Batch,spring Data Elasticsearch,在SpringBatch中,是否支持使用扫描和滚动功能的ElasticSearchItemReader?我确实看到了扩展,但这是基于正常的spring数据搜索查询的。最好有一个基于扫描和滚动特性的,因为批处理作业主要需要处理大量数据。谢谢。虽然ElasticSearch没有“本机”的ItemReader实现,但Spring Batch确实提供了一个RepositoryItemReader,它封装了Spring数据分页和排序存储库。这样,您就可以使用Spring数据ElasticSearch项目提

在SpringBatch中,是否支持使用扫描和滚动功能的ElasticSearchItemReader?我确实看到了扩展,但这是基于正常的spring数据搜索查询的。最好有一个基于扫描和滚动特性的,因为批处理作业主要需要处理大量数据。谢谢。

虽然ElasticSearch没有“本机”的
ItemReader
实现,但Spring Batch确实提供了一个
RepositoryItemReader
,它封装了Spring数据
分页和排序存储库
。这样,您就可以使用Spring数据ElasticSearch项目提供的ElasticSearch存储库定义

您可以在这里的Spring批处理文档中阅读更多关于
RepositoryItemReader

您可以在此处阅读有关Spring数据ElasticSearch项目的更多信息:

import java.util.Iterator;
导入org.springframework.batch.item.data.AbstractPaginatedDataItemReader;
导入org.springframework.data.elasticsearch.core.ElasticsearchOperations;
导入org.springframework.data.elasticsearch.core.query.SearchQuery;
公共类ElasticsearchItemReader扩展了AbstractPaginatedDataItemReader{
私人ElasticsearchOperations ElasticsearchOperations;
私人最终搜索查询;
私有字符串滚动ID;
私有整数scrollTimeinMillis=60000;
私人阶级类型;
公共ElasticsearchItemReader(
最终ElasticsearchOperations ElasticsearchOperations,
最终搜索查询搜索查询,
最终班级类型
) {
this.elasticsearchOperations=elasticsearchOperations;
this.searchQuery=searchQuery;
this.type=type;
}
@凌驾
受保护的void doOpen()引发异常{
scrollId=elasticsearchOperations.scan(searchQuery,scrollTimeinMillis,false);
}
@凌驾
受保护迭代器doPageRead(){
返回elasticsearchOperations.scroll(scrollId,scrollTimeinMillis,type).iterator();
}
}

使用Cunk处理可能有帮助:Spring的任何人都有一些建议吗?
import java.util.Iterator;

import org.springframework.batch.item.data.AbstractPaginatedDataItemReader;
import org.springframework.data.elasticsearch.core.ElasticsearchOperations;
import org.springframework.data.elasticsearch.core.query.SearchQuery;

public class ElasticsearchItemReader<T> extends AbstractPaginatedDataItemReader<T> {
    private ElasticsearchOperations elasticsearchOperations;
    private final SearchQuery searchQuery;
    private String scrollId;
    private int scrollTimeinMillis = 60000;
    private Class<T> type;

    public ElasticsearchItemReader(
        final ElasticsearchOperations elasticsearchOperations,
        final SearchQuery searchQuery,
        final Class<T> type
    ) {
        this.elasticsearchOperations = elasticsearchOperations;
        this.searchQuery = searchQuery;
        this.type = type;
    }

    @Override
    protected void doOpen() throws Exception {
        scrollId = elasticsearchOperations.scan(searchQuery, scrollTimeinMillis, false);
    }

    @Override
    protected Iterator<T> doPageRead() {
        return elasticsearchOperations.scroll(scrollId, scrollTimeinMillis, type).iterator();
   }
}