开发喵星球

若依整合 Easy-Es 实现高效的文章分页查询(392)

Easy-Es (简称 EE) 是一个基于 ElasticSearch 官方提供的 RestHighLevelClient 开发的高效 ORM 框架。它在保留原生功能的基础上进行了优化,旨在简化开发流程,提高代码效率。对于熟悉 MyBatis-Plus (简称 MP) 的开发者来说,Easy-Es 提供了类似的开发体验,几乎可以零学习成本快速上手。实际上,Easy-Es 不仅在功能上与 MP 相似,还融合了 ElasticSearch 的核心特性,在性能优化和灵活性上更胜一筹。

一、ElasticSearch 的核心优势

作为分布式搜索引擎的标杆,ElasticSearch 凭借其出色的性能成为处理海量数据的首选方案。无论是千万级还是百亿级数据的存储与检索,ElasticSearch 都能在秒级内返回精准的查询结果,这在传统关系型数据库中是难以实现的。

ElasticSearch 的主要优势包括:
高并发能力:支持大规模分布式搜索,性能卓越。
灵活的全文检索:强大的分词和排序功能,满足复杂查询场景。
实时性:数据更新后能够快速同步到查询结果。
丰富的扩展功能:支持聚合分析、监控与告警等多种场景。

二、若依整合 Easy-Es 的完整流程

通过整合 Easy-Es,我们可以轻松地为若依系统赋能,快速实现大规模数据的高效检索与管理。以下为具体实现步骤:

1. 配置 application.yml

在项目的配置文件中添加 Easy-Es 的相关配置:

# Easy-Es 配置项
easy-es:
  enable: true  # 是否开启 Easy-Es 自动配置
  address: es-na9iqtzt.public.tencentelasticsearch.com:9200  # ES 服务地址
  schema: https  # 协议类型,支持 http 或 https
  username: elastic  # 用户名
  password: 你的密码  # 密码
  global-config:
    print-dsl: true  # 是否在控制台打印生成的 DSL 语句
    id-type: customize  # 主键生成策略,支持自定义
    refresh-policy: immediate  # 数据刷新策略

2. 引入依赖

pom.xml 文件中添加 Easy-Es 的 Maven 依赖:

<dependency>
    <groupId>cn.easy-es</groupId>
    <artifactId>easy-es-boot-starter</artifactId>
    <version>1.1.1</version>
</dependency>

3. 定义实体类

创建文章实体类,用于映射 ElasticSearch 索引:

@IndexName("es_article")
@Data
public class EsArticle implements Serializable {
    @IndexId(type = IdType.CUSTOMIZE)  // 自定义主键
    private String id;

    @IndexField(fieldType = FieldType.KEYWORD)
    private Long articleId;

    @IndexField(fieldType = FieldType.TEXT, analyzer = Analyzer.IK_SMART)
    private String title;

    @IndexField(fieldType = FieldType.TEXT, analyzer = Analyzer.IK_SMART)
    private String categoryName;

    @IndexField(fieldType = FieldType.KEYWORD)
    private Long readNum;

    @IndexField(fieldType = FieldType.KEYWORD)
    private Long likeNum;

    @IndexField(fieldType = FieldType.DATE, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;
}

4. 创建 Mapper 接口

定义 Mapper 接口来操作索引:

@EsMapperScan("com.ruoyi.es.mapper")
public interface DocumentMapper extends BaseEsMapper<EsArticle> {
}

5. 开发测试接口

在控制器中编写测试方法,用于验证数据插入和分页查询功能:

@RestController
@RequiredArgsConstructor
public class EsController {

    private final DocumentMapper documentMapper;

    @GetMapping("/es/insert")
    public Integer insertTestData(int n) {
        List<Article> articles = fetchArticles(n);  // 假设 fetchArticles 方法获取文章数据
        List<EsArticle> esArticles = articles.stream()
                .map(this::convertToEsArticle)
                .collect(Collectors.toList());
        documentMapper.insertBatch(esArticles);
        return esArticles.size();
    }

    @GetMapping("/es/search")
    public EsPageInfo<EsArticle> search(String keyword, int page) {
        LambdaEsQueryWrapper<EsArticle> query = new LambdaEsQueryWrapper<>();
        query.like(EsArticle::getTitle, keyword)
             .or()
             .like(EsArticle::getCategoryName, keyword);
        return documentMapper.pageQuery(query, page, 10);
    }
}

三、功能测试

  1. 初始化数据
    通过 /es/insert 接口插入测试数据,比如 10000 条文章记录。

  2. 查询测试
    通过 /es/search 接口进行关键词搜索,验证分页查询功能,查询响应迅速,轻松应对大数据量场景。

  3. 在 ES 中验证数据
    通过 ElasticSearch 的管理工具,查看已插入的数据及其结构,确保数据准确。

四、总结与优化

整合 Easy-Es 后,若依系统能够无缝支持 ElasticSearch,实现高性能的大规模数据操作。这种方式不仅显著提升了开发效率,还大大降低了操作 ElasticSearch 的复杂性。
如果想进一步深入了解 Easy-Es 的使用方法及高级功能,建议参考 [Easy-Es 官方文档]:
https://www.easy-es.cn/。

   
分类:Java/OOP 作者:无限繁荣, 吴蓉 发表于:2024-11-16 11:05:28 阅读量:66
<<   >>


powered by kaifamiao