通过Spring Data Elasticsearch Repositories执行滚动请求时设置查询大小

xytpbqjk  于 12个月前  发布在  Spring
关注(0)|答案(2)|浏览(130)

我有一个Sping Boot 应用程序,正在使用spring-data-elasticsearch-5.1.2创建一个scroll请求,以从elasticsearch获取大量的“book“。设置如下所示:

public interface BookRepository extends ElasticsearchRepository<Book, String> {

   Stream<Book> findByAuthorName(String authorName);

}

// and client code invokes like
try (Stream<Book> books = bookRepository.findByAuthor(authorName)) {
   return books.toList();
}
catch (Exception e) {
   // handle
}

这确实有效,但默认情况下滚动请求大小为500(即所生成的查询具有size: 500)。我希望能够更改此值以获取更大的结果集,但我不确定如何做到这一点。我尝试过更新repository方法以接受Pageable,然后使用更大的页面大小进行调用。例如

public interface BookRepository extends ElasticsearchRepository<Book, String> {
   // Add Pageable parameter
   Stream<Book> findByAuthorName(String authorName, Pageable page);

}

// Pass pageable with larger size
try (Stream<Book> books = bookRepository.findByAuthor(authorName, Pageable.ofSize(1_000))) {
   return books.toList();
}
catch (Exception e) {
   // handle
}

但是,生成的查询似乎没有受到影响。

{
  "_source": { ... },
  "from": 0,
  "query": { ... },
  "size": 500, <----- HOW TO CHANGE?
  "track_scores": false,
  "version": true
}

如何更改查询大小?
编辑:添加关于使用仓库滚动的相关文档:

  • https://docs.spring.io/spring-data/elasticsearch/docs/5.1.2/reference/html/#elasticsearch.scroll
  • https://docs.spring.io/spring-data/elasticsearch/docs/5.1.2/reference/html/#repositories.query-streaming
gwo2fgha

gwo2fgha1#

在当前版本(5.1)中,Pageable没有被考虑用于返回Stream<E>的存储库方法,总是使用默认大小500。
我为此创建了an issue,它已经实现并合并,将从5.2-RC 1开始包含。

eh57zj3b

eh57zj3b2#

试着按照doc中的指导使用PageRequest如何?

Page<User> users = repository.findAll(PageRequest.of(1, 20));

相关问题