首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在spring data ElasticSearch4.0中将SearchHits<T>返回类型转换为Page<T>返回类型

在Spring Data Elasticsearch 4.0中,将SearchHits<T>转换为Page<T>类型涉及到手动创建一个Page实现,并从SearchHits中提取必要的信息。这是因为SearchHits提供了关于搜索操作的详细信息,如命中的文档、相关分数、总命中数等,而Page接口则提供了分页相关的信息。

下面是一个示例,展示如何将SearchHits<T>转换为Page<T>

步骤 1: 执行查询并获取SearchHits<T>

首先,你需要执行一个查询并获取SearchHits<T>对象。这通常是通过ElasticsearchRestTemplate或者ElasticsearchRepository完成的。

代码语言:javascript
复制
SearchHits<MyEntity> searchHits = elasticsearchRestTemplate.search(query, MyEntity.class);

步骤 2: 从SearchHits<T>中提取数据并创建Page<T>

接下来,你需要从SearchHits对象中提取数据,并基于这些数据创建一个PageImpl<T>对象(PageImplPage接口的一个简单实现)。

代码语言:javascript
复制
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.PageRequest;

// 假设你已经有了Pageable对象
Pageable pageable = PageRequest.of(page, size);

// 从SearchHits获取内容
List<MyEntity> content = searchHits.getSearchHits().stream()
    .map(SearchHit::getContent)
    .collect(Collectors.toList());

// 创建Page对象
Page<MyEntity> page = new PageImpl<>(content, pageable, searchHits.getTotalHits());

在这个例子中:

  • pagesize 是用于创建Pageable实例的当前页码和每页大小。
  • 我们通过映射每个SearchHit到其内容来获取实体列表。
  • PageImpl构造函数接受内容列表、分页信息和总命中数。

完整示例

这里是一个更完整的示例,展示如何在一个服务方法中实现这个转换:

代码语言:javascript
复制
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
import org.springframework.data.elasticsearch.core.SearchHit;
import org.springframework.data.elasticsearch.core.SearchHits;
import org.springframework.data.elasticsearch.core.query.Query;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.stream.Collectors;

@Service
public class MyService {

    @Autowired
    private ElasticsearchRestTemplate elasticsearchRestTemplate;

    public Page<MyEntity> search(Query query, int page, int size) {
        Pageable pageable = PageRequest.of(page, size);
        SearchHits<MyEntity> searchHits = elasticsearchRestTemplate.search(query, MyEntity.class);

        List<MyEntity> content = searchHits.getSearchHits().stream()
            .map(SearchHit::getContent)
            .collect(Collectors.toList());

        return new PageImpl<>(content, pageable, searchHits.getTotalHits());
    }
}

这个服务方法接受一个Query对象和分页参数,执行搜索,然后将结果转换为Page<MyEntity>

注意事项

  • 确保传递给PageImpltotal参数是searchHits.getTotalHits()的返回值,这样可以确保分页信息的准确性。
  • 这种转换不会保留Elasticsearch返回的所有元数据(如分数、高亮等),如果这些信息对你很重要,你可能需要考虑将它们以某种方式包含在结果中。
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 微服务 day11:基于 ElasticSearch 构建搜索服务

    使用JAVA 客户端实现: 创建搜索请求对象 指定类型(部分版本不需要指定类型,这里以 6.2.1 为例) 构建搜索源对象 配置搜索方式,设置需要过滤字段 向搜索请求中设置搜索源...3、由于设置了 operator 为 or,只要有一个词匹配成功则就返回该文档。...(sourceAsMap); } } 9、排序 可以在字段上添加一个或多个排序,支持在 keyword、date、float 等类型上添加,text 类型的字段上不允许添加排序。...一个搜索请求过来,会分别从各各分片去查询,最后将查询到的数据合并返回给用户。...=true, data=true:即是主结点又是数据结点 master=false, data=true:仅是数据结点 master=true, data=false:仅是主结点,不存储数据 master

    2.2K20

    C#笔记2 —常量

    world"; // hello world string d = @"hello \t world"; // hello \t world...定义一个常量的语法如下: const = value; 下面的代码演示了如何在程序中定义和使用常量: 实例 using System; public...["page"]),但是如果page这个参数在url中不存在,那么前者将返回0,0可能是一个有效的值,所以你不知道url中原来根本就没有这个参数而继续进行下一下的处理,这就可能产生意想不到的效果,而用后一种办法的话没有...Convert.ToInt32(double value) 如果 value 为两个整数中间的数字,则返回二者中的偶数;即 3.5换为4,4.5 转换为 4,而 5.5 转换为 6。...不过4.6可以转换为5,4.4转换为4 b. int.Parse("4.5") 直接报错:"输入字符串的格式不正确". c. int(4.6) = 4 Int转化其他数值类型为Int时没有四舍五入,强制转换

    1.3K20

    ElasticSearch全文搜索引擎 -Spring Boot操作ES(SpringData概述、Spring Data Elasticsearch、基本操作、ElasticSearch操作文档)

    Spring Data概述 2. Spring Data Elasticsearch 3. 实现基本操作 4. ElasticSearch操作文档 5....Spring Data概述 Spring Dataspring提供的一套连接各种第三方数据源的框架集,它支持连接很多第三方数据源,例如: 数据库 redis ElasticSearch MongoDB...Spring Data Elasticsearch 上面章节介绍了Spring Data可以连接很多第三方数据源,其中ES就是Spring Data可以连接的对象。...Spring Data支持编写方法名表达操作,会自动按方法名的表达生成实现代码,这是它的一大优势!...=1; int pageSize=2; //PageRequest.of返回Pageable,Pageable页数从第0页开始 Page page=itemRepository.queryItemsByTitleMatchesOrBrandMatchesOrderByPriceDesc

    2.2K20

    上新了Spring,全新一代类型转换机制

    职责不单一:该接口有非常多的方法,但只用到2个而已 类型不安全:setValue()方法入参是Object,getValue()返回值是Object,依赖于约定好的类型,不安全 线程不安全:依赖于setValue...:Source -> Target类型转换接口,适用于1:1换 ConverterFactory:Source -> R类型转换接口,适用于1:N转换 GenericConverter...这套接口,解决了PropertyEditor做类型转换存在的所有缺陷,且具有非常高的灵活性和可扩展性。下面进入详细了解。 Converter 将源类型S转换为目标类型T。...适合1:1换场景:可以将任意类型换为 任意类型。...对于专用的转换器Converter,它已明确规定了转换的类型,自然就不需要做前置判断喽。 ✍总结 本文详细介绍了Spring新一代的类型转换接口,类型转换作为Spring的基石,其重要性可见一斑。

    90320

    【Elasticsearch】黑马旅游案例

    因此,我们在cn.itcast.hotel.pojo中定义返回结果: package cn.itcast.hotel.pojo; ​ import lombok.Data; ​ import java.util.List...return 酒店文档列表 */ PageResult search(RequestParams params); 2)实现搜索业务,肯定离不开RestHighLevelClient,我们需要把它注册到Spring...searchHits = response.getHits();    // 4.1.获取总条数    long total = searchHits.getTotalHits().value;...在之前的业务中,只有match查询,根据关键字搜索,现在要添加条件过滤,包括: 品牌过滤:是keyword类型,用term查询 星级过滤:是keyword类型,用term查询 价格过滤:是数值类型...; ​ @Data public class RequestParams {    private String key;    private Integer page;    private

    28030

    Spring Boot 整合 ElasticSearch 这么简单?

    spring-data-elasticsearch 中 Operations 和 Repository 相关技术的使用。...如何在 Spring Boot 项目中引入 spring-data-elasticsearch。 ElasticSearch的使用场景和相关技术 搜索功能不仅在互联网项目中需要,在企业级项目中也需要。...搜索结果类型 ElasticSearch 搜索 API 在返回搜索数据的同时也会返回搜索产生的额外信息,比如匹配到的总数量、排序字段值、高亮显示等,这些伴随着搜索的额外信息就被放置在 spring-data-elasticsearch...本节将介绍 spring-data-elasticsearch 搜索结果的包装类。...该类型为接口类型spring-data-elasticsearch 提供了 3 个实现类,分别是: CriteriaQuery StringQuery NativeSearchQuery。

    1.5K30

    上新了Spring,全新一代类型转换机制

    职责不单一:该接口有非常多的方法,但只用到2个而已 类型不安全:setValue()方法入参是Object,getValue()返回值是Object,依赖于约定好的类型,不安全 线程不安全:依赖于setValue...:Source -> Target类型转换接口,适用于1:1换 ConverterFactory:Source -> R类型转换接口,适用于1:N转换 GenericConverter...这套接口,解决了PropertyEditor做类型转换存在的所有缺陷,且具有非常高的灵活性和可扩展性。下面进入详细了解。 Converter 将源类型S转换为目标类型T。...适合1:1换场景:可以将任意类型换为 任意类型。...对于专用的转换器Converter,它已明确规定了转换的类型,自然就不需要做前置判断喽。 ✍总结 本文详细介绍了Spring新一代的类型转换接口,类型转换作为Spring的基石,其重要性可见一斑。

    1.3K30
    领券