在Spring Data Elastic Search 4.0.0中从SearchHits类获取InnerHits结果。

问题描述 投票:0回答:1

我现在正在从Spring Data elastic search 3.2.X迁移到4.0.0。

我一直依赖通过原始的SearchResponse类来获取内部点击结果,使用了现在已经废弃的低级函数 org.springframework.data.elasticsearch.core.ElasticsearchOperations.query(SearchQuery query, ResultsExtractor resultsExtractor)。

https:/docs.spring.iospring-dataelasticsearchdocs4.0.0.RELEASEreferencehtml#elasticsearch-migration-guid-3.2-4.0。

基本上我所做的是创建自定义的resultExtractor,它将暴露低层的SearchResponse,这样我就可以提取内部的点击结果。

现在在4.0.0版本中,这个功能已经不存在了,ElasticSearchOperations和ElasticSearchRestTemplate都使用了新的结果类SearchHits,AFAIK并不存储内部点击信息。

除了直接使用 restHighLevelClient(当然这是不可取的,因为我会失去对象映射之类的东西)之外,我能想到的变通办法是扩展 ElasticSearchRestTemplate,并基本上创建新的实现,以实现 搜索(Query query, Class clazz, IndexCoordinates index) 它将返回SearchHits和原始搜索响应(类似于我的自定义ResultExtractor所做的)。

之后,由于所有的api返回页面实例已经被废弃,我现在只能依靠 SearchHitSupport.searchPageFor(SearchHits searchHits, @Nullable Pageable) 来获得常用的分页功能。

我觉得这并不是很直接干净的解决方案,当然感觉更像是一个变通的方法。在4.0.0版本的时候,有没有更直接的方法来获取innerHitsResult,并将结果内容映射到页面?

java spring spring-data-elasticsearch
1个回答
1
投票

有一个 未决问题 关于inner_hits。返回 内部点击率 应在 SearchHit<T> 类,而不是通过暴露内部Elasticsearch数据。

至于分页。当你有一个 SearchHits<T> 对象,作为使用了 Pageable,你可以打电话

SearchHits<Entity> searchHits = operations.search(query, Entity.class);
SearchPage<Entity> page = SearchHitSupport.searchPageFor(searchHits, query.getPageable)

SearchPage 实现了 Page 界面。

编辑。

这个问题已经解决了,从下一个版本(4.1)开始就会返回内部点击。

© www.soinside.com 2019 - 2024. All rights reserved.