从 Spring Data Elastic Search 4.0.0 的 SearchHits Class 获取 InnerHits 结果
Getting InnerHits Result from SearchHits Class at Spring Data Elastic Search 4.0.0
我目前正在从 spring 数据弹性搜索 3.2.X 迁移到 4.0.0.
我一直依赖于通过原始 SearchResponse class 通过利用现已弃用的低级函数 org.springframework.data.elasticsearch.core.ElasticsearchOperations.query(SearchQuery query, ResultsExtractor resultsExtractor) 获得内部命中结果;
基本上我所做的是创建自定义 resultExtractor,它将公开低级别的 SearchResponse,这样我就可以提取内部命中结果。
现在版本 4.0.0 不再存在该功能,ElasticSearchOperations 和 ElasticSearchRestTemplate 都使用称为 SearchHits 的新结果 class,AFAIK 不存储内部命中信息。
除了直接使用 restHighLevelClient(这当然是不可取的,因为我会丢失对象映射和东西)之外我能想到的解决方法是扩展 ElasticSearchRestTemplate 并基本上创建 search( Query query, Class clazz, IndexCoordinates index) 这将 return SearchHits 和原始搜索响应(类似于我的自定义 ResultExtractor 过去所做的)。
之后,由于所有 api returning 页面实例已被弃用,我现在不得不依赖 SearchHitSupport.searchPageFor(SearchHits searchHits, @Nullable Pageable pageable) 以获得通常的分页功能。
我觉得这不是一个非常直接和干净的解决方案,当然感觉更像是一种解决方法。在 4.0.0 版本中,是否有更直接的方法来获取 innerHitsResult 并将结果内容映射到页面?
关于inner_hits有一个open issue。返回 inner_hits 应该在 SearchHit<T>
class 中完成,而不是通过暴露内部 Elasticsearch 数据。
至于分页:当您有一个 SearchHits<T>
对象作为使用 Pageable
的查询的结果时,您可以调用
SearchHits<Entity> searchHits = operations.search(query, Entity.class);
SearchPage<Entity> page = SearchHitSupport.searchPageFor(searchHits, query.getPageable)
SearchPage
实现了 Page
接口。
编辑:
问题已修复,从下一个版本(4.1)开始返回内部命中。
我目前正在从 spring 数据弹性搜索 3.2.X 迁移到 4.0.0.
我一直依赖于通过原始 SearchResponse class 通过利用现已弃用的低级函数 org.springframework.data.elasticsearch.core.ElasticsearchOperations.query(SearchQuery query, ResultsExtractor resultsExtractor) 获得内部命中结果;
基本上我所做的是创建自定义 resultExtractor,它将公开低级别的 SearchResponse,这样我就可以提取内部命中结果。
现在版本 4.0.0 不再存在该功能,ElasticSearchOperations 和 ElasticSearchRestTemplate 都使用称为 SearchHits 的新结果 class,AFAIK 不存储内部命中信息。
除了直接使用 restHighLevelClient(这当然是不可取的,因为我会丢失对象映射和东西)之外我能想到的解决方法是扩展 ElasticSearchRestTemplate 并基本上创建 search( Query query, Class clazz, IndexCoordinates index) 这将 return SearchHits 和原始搜索响应(类似于我的自定义 ResultExtractor 过去所做的)。
之后,由于所有 api returning 页面实例已被弃用,我现在不得不依赖 SearchHitSupport.searchPageFor(SearchHits searchHits, @Nullable Pageable pageable) 以获得通常的分页功能。
我觉得这不是一个非常直接和干净的解决方案,当然感觉更像是一种解决方法。在 4.0.0 版本中,是否有更直接的方法来获取 innerHitsResult 并将结果内容映射到页面?
关于inner_hits有一个open issue。返回 inner_hits 应该在 SearchHit<T>
class 中完成,而不是通过暴露内部 Elasticsearch 数据。
至于分页:当您有一个 SearchHits<T>
对象作为使用 Pageable
的查询的结果时,您可以调用
SearchHits<Entity> searchHits = operations.search(query, Entity.class);
SearchPage<Entity> page = SearchHitSupport.searchPageFor(searchHits, query.getPageable)
SearchPage
实现了 Page
接口。
编辑:
问题已修复,从下一个版本(4.1)开始返回内部命中。