我有一个连接到 ElasticSearch 集群的 Spring Boot 应用程序,我正在对其执行以下操作:
@Autowired
private ElasticsearchOperations operations;
public Page<Metadata> search(Request request){
Query query = this.queryBuilder(request);
SearchHits<Metadata> hits = operations.search(query, Metadata.class);
\\ some code to convert SearchHits<Metadata> to Page<Metadata> type
}
元数据是我的自定义实体,查询构建器是我定义的另一个函数,它在运行时返回弹性搜索查询类型。问题是,我需要在返回这些传入数据之前对其进行分页。我浏览了 spring data elasticsearch 的整个官方文档,但没有找到任何分页结果的示例。事实上,我在互联网上任何地方都能找到的唯一分页示例是使用 spring 存储库搜索方法,它是这样的,
Page<Metadata> page = repository.search(query, PageRequest.of(0,1));
但该方法现在在 4.x 版本的包中已弃用。我正在使用的查询是由另一个函数(queryBuilder
函数)动态构造的,它取决于传入的请求参数,因此在存储库接口上定义方法是不可能的,因为它需要我为每个参数组合定义方法和每次检查哪个与 if-else 条件块一起使用。有没有办法从 ElasticSearchOperations 接口方法返回 Page <T> 类型(官方文档声称 SearchPage <T> 类型是可用于返回值的类型之一,但建议的方法都没有返回该类型)或或者有什么方法可以将 SearchHits<T> 转换为 Page<T> 类型。
任何帮助深表感谢。