如何使用 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月前
|
存储 SQL 监控
|
3月前
|
JSON Java 网络架构
elasticsearch学习四:使用springboot整合 rest 进行搭建elasticsearch服务
这篇文章介绍了如何使用Spring Boot整合REST方式来搭建和操作Elasticsearch服务。
157 4
elasticsearch学习四:使用springboot整合 rest 进行搭建elasticsearch服务
|
2月前
|
JSON Java API
springboot集成ElasticSearch使用completion实现补全功能
springboot集成ElasticSearch使用completion实现补全功能
47 1
|
3月前
|
Web App开发 JavaScript Java
elasticsearch学习五:springboot整合 rest 操作elasticsearch的 实际案例操作,编写搜索的前后端,爬取京东数据到elasticsearch中。
这篇文章是关于如何使用Spring Boot整合Elasticsearch,并通过REST客户端操作Elasticsearch,实现一个简单的搜索前后端,以及如何爬取京东数据到Elasticsearch的案例教程。
250 0
elasticsearch学习五:springboot整合 rest 操作elasticsearch的 实际案例操作,编写搜索的前后端,爬取京东数据到elasticsearch中。
|
3月前
|
自然语言处理 Java Maven
elasticsearch学习二:使用springboot整合TransportClient 进行搭建elasticsearch服务
这篇博客介绍了如何使用Spring Boot整合TransportClient搭建Elasticsearch服务,包括项目创建、Maven依赖、业务代码和测试示例。
149 0
elasticsearch学习二:使用springboot整合TransportClient 进行搭建elasticsearch服务
|
3月前
|
自然语言处理 搜索推荐 Java
SpringBoot 搜索引擎 海量数据 Elasticsearch-7 es上手指南 毫秒级查询 包括 版本选型、操作内容、结果截图(一)
SpringBoot 搜索引擎 海量数据 Elasticsearch-7 es上手指南 毫秒级查询 包括 版本选型、操作内容、结果截图
70 0
|
3月前
|
存储 自然语言处理 搜索推荐
SpringBoot 搜索引擎 海量数据 Elasticsearch-7 es上手指南 毫秒级查询 包括 版本选型、操作内容、结果截图(二)
SpringBoot 搜索引擎 海量数据 Elasticsearch-7 es上手指南 毫秒级查询 包括 版本选型、操作内容、结果截图(二)
47 0
|
3月前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,包括版本兼容性、安全性、性能调优等方面。
199 1
|
2月前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用。
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用。首先,创建并配置 Spring Boot 项目,实现后端 API;然后,使用 Ant Design Pro Vue 创建前端项目,配置动态路由和菜单。通过具体案例,展示了如何快速搭建高效、易维护的项目框架。
131 62
|
22天前
|
存储 JavaScript 前端开发
基于 SpringBoot 和 Vue 开发校园点餐订餐外卖跑腿Java源码
一个非常实用的校园外卖系统,基于 SpringBoot 和 Vue 的开发。这一系统源于黑马的外卖案例项目 经过站长的进一步改进和优化,提供了更丰富的功能和更高的可用性。 这个项目的架构设计非常有趣。虽然它采用了SpringBoot和Vue的组合,但并不是一个完全分离的项目。 前端视图通过JS的方式引入了Vue和Element UI,既能利用Vue的快速开发优势,
106 13