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

简介: 【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;
目录
相关文章
|
4月前
|
人工智能 运维 Java
Spring AI Alibaba Admin 开源!以数据为中心的 Agent 开发平台
Spring AI Alibaba Admin 正式发布!一站式实现 Prompt 管理、动态热更新、评测集构建、自动化评估与全链路可观测,助力企业高效构建可信赖的 AI Agent 应用。开源共建,现已上线!
5566 81
|
4月前
|
NoSQL Java 数据库连接
《深入理解Spring》Spring Data——数据访问的统一抽象与极致简化
Spring Data通过Repository抽象和方法名派生查询,简化数据访问层开发,告别冗余CRUD代码。支持JPA、MongoDB、Redis等多种存储,统一编程模型,提升开发效率与架构灵活性,是Java开发者必备利器。(238字)
存储 JSON Java
693 0
|
7月前
|
JSON Java 数据格式
Spring Boot返回Json数据及数据封装
在Spring Boot中,接口间及前后端的数据传输通常使用JSON格式。通过@RestController注解,可轻松实现Controller返回JSON数据。该注解是Spring Boot新增的组合注解,结合了@Controller和@ResponseBody的功能,默认将返回值转换为JSON格式。Spring Boot底层默认采用Jackson作为JSON解析框架,并通过spring-boot-starter-json依赖集成了相关库,包括jackson-databind、jackson-datatype-jdk8等常用模块,简化了开发者对依赖的手动管理。
700 3
|
11月前
|
JSON Java 数据格式
微服务——SpringBoot使用归纳——Spring Boot返回Json数据及数据封装——封装统一返回的数据结构
本文介绍了在Spring Boot中封装统一返回的数据结构的方法。通过定义一个泛型类`JsonResult&lt;T&gt;`,包含数据、状态码和提示信息三个属性,满足不同场景下的JSON返回需求。例如,无数据返回时可设置默认状态码&quot;0&quot;和消息&quot;操作成功!&quot;,有数据返回时也可自定义状态码和消息。同时,文章展示了如何在Controller中使用该结构,通过具体示例(如用户信息、列表和Map)说明其灵活性与便捷性。最后总结了Spring Boot中JSON数据返回的配置与实际项目中的应用技巧。
845 0
|
11月前
|
JSON Java fastjson
微服务——SpringBoot使用归纳——Spring Boot返回Json数据及数据封装——使用 fastJson 处理 null
本文介绍如何使用 fastJson 处理 null 值。与 Jackson 不同,fastJson 需要通过继承 `WebMvcConfigurationSupport` 类并覆盖 `configureMessageConverters` 方法来配置 null 值的处理方式。例如,可将 String 类型的 null 转为 &quot;&quot;,Number 类型的 null 转为 0,避免循环引用等。代码示例展示了具体实现步骤,包括引入相关依赖、设置序列化特性及解决中文乱码问题。
581 0
|
11月前
|
JSON Java fastjson
微服务——SpringBoot使用归纳——Spring Boot返回Json数据及数据封装——Spring Boot 默认对Json的处理
本文介绍了在Spring Boot中返回Json数据的方法及数据封装技巧。通过使用`@RestController`注解,可以轻松实现接口返回Json格式的数据,默认使用的Json解析框架是Jackson。文章详细讲解了如何处理不同数据类型(如类对象、List、Map)的Json转换,并提供了自定义配置以应对null值问题。此外,还对比了Jackson与阿里巴巴FastJson的特点,以及如何在项目中引入和配置FastJson,解决null值转换和中文乱码等问题。
1574 0
|
存储 NoSQL Java
使用Java和Spring Data构建数据访问层
本文介绍了如何使用 Java 和 Spring Data 构建数据访问层的完整过程。通过创建实体类、存储库接口、服务类和控制器类,实现了对数据库的基本操作。这种方法不仅简化了数据访问层的开发,还提高了代码的可维护性和可读性。通过合理使用 Spring Data 提供的功能,可以大幅提升开发效率。
292 21
|
人工智能 安全 Dubbo
Spring AI 智能体通过 MCP 集成本地文件数据
MCP 作为一款开放协议,直接规范了应用程序如何向 LLM 提供上下文。MCP 就像是面向 AI 应用程序的 USB-C 端口,正如 USB-C 提供了一种将设备连接到各种外围设备和配件的标准化方式一样,MCP 提供了一个将 AI 模型连接到不同数据源和工具的标准化方法。
5695 100
|
弹性计算 运维 Serverless
超值选择:阿里云Elasticsearch Serverless在企业数据检索与分析中的高性能与灵活性
本文介绍了阿里云Elasticsearch Serverless服务的高性价比与高度弹性灵活性。
583 8

热门文章

最新文章