java - 从 Spring Data Elastic Search 4.0.0 的 SearchHits 类中获取 InnerHits 结果
问题描述
我目前正在从 spring data elastic search 3.2.X 迁移到 4.0.0。
我一直依赖于通过使用现已弃用的低级函数org.springframework.data.elasticsearch.core.ElasticsearchOperations.query(SearchQuery query, ResultsExtractor resultsExtractor) 通过原始 SearchResponse 类获得内部命中结果;
基本上我所做的是创建自定义 resultExtractor 它将公开低级别 SearchResponse 以便我可以提取内部点击结果。
现在随着版本 4.0.0 不再存在该功能,ElasticSearchOperations 和 ElasticSearchRestTemplate 都使用名为 SearchHits 的新结果类,AFAIK 不存储内部命中信息。
除了直接使用restHighLevelClient(这当然是不可取的,因为我会丢失对象映射和东西)之外,我可以想到的解决方法是扩展ElasticSearchRestTemplate并基本上创建搜索的新实现(查询查询,类clazz,IndexCoordinates索引)将返回 SearchHits 和原始搜索响应(类似于我的自定义 ResultExtractor 过去所做的)。
之后,由于所有 api 返回页面实例已被弃用,我现在必须依靠SearchHitSupport.searchPageFor(SearchHits searchHits, @Nullable Pageable pageable)来获得通常的分页功能。
我觉得这不是非常直接和干净的解决方案,当然感觉更像是一种解决方法。在 4.0.0 版本中是否有更直接的方法来获取 innerHitsResult 并将结果内容映射到页面?
解决方案
关于 inner_hits有一个未解决的问题。返回inner_hits应该在SearchHit<T>
类中完成,而不是通过公开内部 Elasticsearch 数据。
至于分页:当您有一个SearchHits<T>
对象作为使用 a 的查询的结果时Pageable
,您可以调用
SearchHits<Entity> searchHits = operations.search(query, Entity.class);
SearchPage<Entity> page = SearchHitSupport.searchPageFor(searchHits, query.getPageable)
SearchPage
实现Page
接口。
编辑:
问题已修复,从下一个版本(4.1)开始返回内部命中。
推荐阅读
- python - Pyspark ImportError:没有名为 spark_df_profiling 的模块
- sql - 在触发函数和 IF 语句中减去查询结果
- php - 如何使用作曲家加载库?
- git - Git post-receive hook实时输出流
- c# - “行”参数不能为空。参数名称:行
- python - 如何使用函数和 sqlalchemy 连接到数据库
- c - 是否可以使用内联 ASM 计算 __cdecl 中的函数(变量)参数?
- r - 正则表达式删除剩余的 ascii 十六进制代码
- python - 为什么在 Pandas 数据框中按日期分组这么慢?
- css - 如何将我的 svg 图像定位到浏览器的中心