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

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 【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 提供的接口和方法,可以方便地进行数据的增删改查操作和复杂的聚合查询。

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
2月前
|
人工智能 自然语言处理 前端开发
SpringBoot + 通义千问 + 自定义React组件:支持EventStream数据解析的技术实践
【10月更文挑战第7天】在现代Web开发中,集成多种技术栈以实现复杂的功能需求已成为常态。本文将详细介绍如何使用SpringBoot作为后端框架,结合阿里巴巴的通义千问(一个强大的自然语言处理服务),并通过自定义React组件来支持服务器发送事件(SSE, Server-Sent Events)的EventStream数据解析。这一组合不仅能够实现高效的实时通信,还能利用AI技术提升用户体验。
184 2
|
22天前
|
SQL 前端开发 关系型数据库
SpringBoot使用mysql查询昨天、今天、过去一周、过去半年、过去一年数据
SpringBoot使用mysql查询昨天、今天、过去一周、过去半年、过去一年数据
48 9
|
2月前
|
JSON Java 网络架构
elasticsearch学习四:使用springboot整合 rest 进行搭建elasticsearch服务
这篇文章介绍了如何使用Spring Boot整合REST方式来搭建和操作Elasticsearch服务。
130 4
elasticsearch学习四:使用springboot整合 rest 进行搭建elasticsearch服务
|
2月前
|
SQL JSON Java
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和PageHelper进行分页操作,并且集成Swagger2来生成API文档,同时定义了统一的数据返回格式和请求模块。
58 1
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
|
27天前
|
存储 easyexcel Java
SpringBoot+EasyExcel轻松实现300万数据快速导出!
本文介绍了在项目开发中使用Apache POI进行数据导入导出的常见问题及解决方案。首先比较了HSSFWorkbook、XSSFWorkbook和SXSSFWorkbook三种传统POI版本的优缺点,然后根据数据量大小推荐了合适的使用场景。接着重点介绍了如何使用EasyExcel处理超百万数据的导入导出,包括分批查询、分批写入Excel、分批插入数据库等技术细节。通过测试,300万数据的导出用时约2分15秒,导入用时约91秒,展示了高效的数据处理能力。最后总结了公司现有做法的不足,并提出了改进方向。
|
1月前
|
JSON Java API
springboot集成ElasticSearch使用completion实现补全功能
springboot集成ElasticSearch使用completion实现补全功能
35 1
|
2月前
|
easyexcel Java UED
SpringBoot中大量数据导出方案:使用EasyExcel并行导出多个excel文件并压缩zip后下载
在SpringBoot环境中,为了优化大量数据的Excel导出体验,可采用异步方式处理。具体做法是将数据拆分后利用`CompletableFuture`与`ThreadPoolTaskExecutor`并行导出,并使用EasyExcel生成多个Excel文件,最终将其压缩成ZIP文件供下载。此方案提升了导出效率,改善了用户体验。代码示例展示了如何实现这一过程,包括多线程处理、模板导出及资源清理等关键步骤。
|
2月前
|
存储 Java API
如何使用 Java 记录简化 Spring Data 中的数据实体
如何使用 Java 记录简化 Spring Data 中的数据实体
38 9
|
2月前
|
Web App开发 JavaScript Java
elasticsearch学习五:springboot整合 rest 操作elasticsearch的 实际案例操作,编写搜索的前后端,爬取京东数据到elasticsearch中。
这篇文章是关于如何使用Spring Boot整合Elasticsearch,并通过REST客户端操作Elasticsearch,实现一个简单的搜索前后端,以及如何爬取京东数据到Elasticsearch的案例教程。
203 0
elasticsearch学习五:springboot整合 rest 操作elasticsearch的 实际案例操作,编写搜索的前后端,爬取京东数据到elasticsearch中。
|
2月前
|
自然语言处理 Java Maven
elasticsearch学习二:使用springboot整合TransportClient 进行搭建elasticsearch服务
这篇博客介绍了如何使用Spring Boot整合TransportClient搭建Elasticsearch服务,包括项目创建、Maven依赖、业务代码和测试示例。
107 0
elasticsearch学习二:使用springboot整合TransportClient 进行搭建elasticsearch服务