gpt4 book ai didi

java - 从 Spring Data Elastic Search 4.0.0 的 SearchHits 类获取 InnerHits 结果

转载 作者:行者123 更新时间:2023-12-03 23:47:01 38 4
gpt4 key购买 nike

我目前正在从 spring 数据 Elasticsearch 3.2.X 迁移到 4.0.0。

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

https://docs.spring.io/spring-data/elasticsearch/docs/4.0.0.RELEASE/reference/html/#elasticsearch-migration-guide-3.2-4.0

基本上我所做的是创建自定义的 resultExtractor,它将公开低级别的 SearchResponse,以便我可以提取内部点击结果。

现在 4.0.0 版本不再存在该功能,ElasticSearchOperations 和 ElasticSearchRestTemplate 都使用称为 SearchHits 的新结果类,AFAIK 不存储内部命中信息。

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

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

我觉得这不是很简单和干净的解决方案,当然感觉更像是一种解决方法。在 4.0.0 版本中,是否有更直接的方法来获取 innerHitsResult 并将结果内容映射到页面?

最佳答案

有一个open issue关于inner_hits。返回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) 开始返回内部命中。

关于java - 从 Spring Data Elastic Search 4.0.0 的 SearchHits 类获取 InnerHits 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62115096/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com