SpringBoot集成Elasticsearch7.4 实战(2)

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
可视分析地图(DataV-Atlas),3 个项目,100M 存储空间
数据可视化DataV,5个大屏 1个月
简介: Springboot集成Elasticsearch完成对文档数据的基本管理

elasticsearch

1. 数据管理

1.1. 新增数据

1.1.1. 单实例新增

http方式提交数据,案例中我将数据格式做了规范,提交过程中需要指定索引名,以及JSON格式数据,这样尽可能在实际过程中做到通用。

为此我用交互对象Vo来接受前端传递来的数据,再解析该Vo,获取要提交的目标索引。

  • 前端Web端实现

  

/**

 * @Description 新增数据

 * @param elasticDataVo

 * @return xyz.wongs.drunkard.base.message.response.ResponseResult

 * @throws

 * @date 2019/11/20 17:10

 */

@RequestMapping(value = "/add",method = RequestMethod.POST)

public ResponseResult add(@RequestBody ElasticDataVo elasticDataVo){

 ResponseResult response = getResponseResult();

 try {

 if(!StringUtils.isNotEmpty(elasticDataVo.getIdxName())){

 response.setCode(ResponseCode.PARAM_ERROR_CODE.getCode());

 response.setMsg("索引为空,不允许提交");

 response.setStatus(false);

 log.warn("索引为空");

 return response;

 }

 ElasticEntity elasticEntity = new ElasticEntity();

 elasticEntity.setId(elasticDataVo.getElasticEntity().getId());

 elasticEntity.setData(elasticDataVo.getElasticEntity().getData());

  

 baseElasticService.insertOrUpdateOne(elasticDataVo.getIdxName(), elasticEntity);

  

 } catch (Exception e) {

 response.setCode(ResponseCode.ERROR.getCode());

 response.setMsg("服务忙,请稍后再试");

 response.setStatus(false);

 log.error("插入数据异常,metadataVo={},异常信息={}", elasticDataVo.toString(),e.getMessage());

 }

 return response;

}
  • ElasticDataVo类

  

package xyz.wongs.drunkard.palant.vo;

  

import lombok.AllArgsConstructor;

import lombok.Data;

import lombok.NoArgsConstructor;

import xyz.wongs.drunkard.base.entiy.ElasticEntity;

  

/**

 * @ClassName ElasticDataVo

 * @Description http交互Vo对象

 * @author WCNGS@QQ.COM

 * @Github <a>https://github.com/rothschil</a>

 * @date 2019/11/21 9:10

 * @Version 1.0.0

*/

@Data

@NoArgsConstructor

@AllArgsConstructor

public class ElasticDataVo<T> {

  

 /**

 * 索引名

 */

 private String idxName;

 /**

 * 数据存储对象

 */

 private ElasticEntity elasticEntity;

  

}

  
  
  • ElasticEntity类

  

package xyz.wongs.drunkard.base.entiy;

  

import lombok.AllArgsConstructor;

import lombok.Data;

import lombok.NoArgsConstructor;

import xyz.wongs.drunkard.base.persistence.mybatis.entity.BaseEntity;

  

import java.util.Map;

  

/**

 * @ClassName ElasticEntity

 * @Description  数据存储对象

 * @author WCNGS@QQ.COM

 * @Github <a>https://github.com/rothschil</a>

 * @date 2019/11/21 9:10

 * @Version 1.0.0

*/

@Data

@AllArgsConstructor

@NoArgsConstructor

public class ElasticEntity<T> {

  

 /**

 * 主键标识,用户ES持久化

 */

 private String id;

  

 /**

 * JSON对象,实际存储数据

 */

 private Map data;

}

  
  • Postman提交

测试用例

1.1.2. 批量提交

1.2. 条件查询

为了通用,我在web端也分装了一层Vo,为了演示需要我仅写一个 match 精确匹配的查询。

  • 前端web实现

/**

 * @Description

 * @param queryVo 查询实体对象

 * @return xyz.wongs.drunkard.base.message.response.ResponseResult

 * @throws

 * @date 2019/11/21 9:31

 */

@RequestMapping(value = "/get",method = RequestMethod.GET)

public ResponseResult get(@RequestBody QueryVo queryVo){

  

 ResponseResult response = getResponseResult();

  

 if(!StringUtils.isNotEmpty(queryVo.getIdxName())){

 response.setCode(ResponseCode.PARAM_ERROR_CODE.getCode());

 response.setMsg("索引为空,不允许提交");

 response.setStatus(false);

 log.warn("索引为空");

 return response;

 }

  

 try {

 Class<?> clazz = ElasticUtil.getClazz(queryVo.getClassName());

 Map<String,Object> params = queryVo.getQuery().get("match");

 Set<String> keys = params.keySet();

 MatchQueryBuilder queryBuilders=null;

 for(String ke:keys){

 queryBuilders = QueryBuilders.matchQuery(ke, params.get(ke));

 }

 if(null!=queryBuilders){

 SearchSourceBuilder searchSourceBuilder = ElasticUtil.initSearchSourceBuilder(queryBuilders);

 List<?> data = baseElasticService.search(queryVo.getIdxName(),searchSourceBuilder,clazz);

 response.setData(data);

 }

 } catch (Exception e) {

 response.setCode(ResponseCode.ERROR.getCode());

 response.setMsg("服务忙,请稍后再试");

 response.setStatus(false);

 log.error("查询数据异常,metadataVo={},异常信息={}", queryVo.toString(),e.getMessage());

 }

 return response;

}

  
  • QueryVo

  

/** 查询Vo对象

 * @ClassName QueryVo

 * @Description

 * @author WCNGS@QQ.COM

 * @Github <a>https://github.com/rothschil</a>

 * @date 2019/10/25 23:16

 * @Version 1.0.0

*/

@Data

@NoArgsConstructor

@AllArgsConstructor

public class QueryVo {

  

 /**

 * 索引名

 */

 private String idxName;

 /**

 * 需要反射的实体类型,用于对查询结果的封装

 */

 private String className;

 /**

 * 具体条件

 */

 private Map<String,Map<String,Object>> query;

}

  
  • Postman提交

条件查询

1.3. 删除数据

1.3.1. 单实例删除


/**

 * @Description 删除

 * @param elasticDataVo

 * @return xyz.wongs.drunkard.base.message.response.ResponseResult

 * @throws

 * @date 2019/11/21 9:56

 */

@RequestMapping(value = "/delete",method = RequestMethod.POST)

public ResponseResult delete(@RequestBody ElasticDataVo elasticDataVo){

 ResponseResult response = getResponseResult();

 try {

 if(!StringUtils.isNotEmpty(elasticDataVo.getIdxName())){

 response.setCode(ResponseCode.PARAM_ERROR_CODE.getCode());

 response.setMsg("索引为空,不允许提交");

 response.setStatus(false);

 log.warn("索引为空");

 return response;

 }

 baseElasticService.deleteOne(elasticDataVo.getIdxName(),elasticDataVo.getElasticEntity());

 } catch (Exception e) {

 e.printStackTrace();

 }

 return response;

  

}

删除数据

1.3.2. 批量删除

2. 源码

Github演示源码 ,记得给Star

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
12天前
|
缓存 NoSQL Java
Springboot实战——黑马点评之秒杀优化
【9月更文挑战第27天】在黑马点评项目中,秒杀功能的优化对提升系统性能和用户体验至关重要。本文提出了多项Spring Boot项目的秒杀优化策略,包括数据库优化(如索引和分库分表)、缓存优化(如Redis缓存和缓存预热)、并发控制(如乐观锁、悲观锁和分布式锁)以及异步处理(如消息队列和异步任务执行)。这些策略能有效提高秒杀功能的性能和稳定性,为用户提供更佳体验。
|
1天前
|
自然语言处理 搜索推荐 Java
SpringBoot 搜索引擎 海量数据 Elasticsearch-7 es上手指南 毫秒级查询 包括 版本选型、操作内容、结果截图(一)
SpringBoot 搜索引擎 海量数据 Elasticsearch-7 es上手指南 毫秒级查询 包括 版本选型、操作内容、结果截图
10 0
|
1天前
|
存储 自然语言处理 搜索推荐
SpringBoot 搜索引擎 海量数据 Elasticsearch-7 es上手指南 毫秒级查询 包括 版本选型、操作内容、结果截图(二)
SpringBoot 搜索引擎 海量数据 Elasticsearch-7 es上手指南 毫秒级查询 包括 版本选型、操作内容、结果截图(二)
10 0
|
2月前
|
网络协议 Java API
SpringBoot整合Elasticsearch-Rest-Client、测试保存、复杂检索
这篇文章介绍了如何在SpringBoot中整合Elasticsearch-Rest-Client,并提供了保存数据和进行复杂检索的测试示例。
SpringBoot整合Elasticsearch-Rest-Client、测试保存、复杂检索
|
2月前
|
NoSQL Java Redis
Redis6入门到实战------ 八、Redis与Spring Boot整合
这篇文章详细介绍了如何在Spring Boot项目中整合Redis,包括在`pom.xml`中添加依赖、配置`application.properties`文件、创建配置类以及编写测试类来验证Redis的连接和基本操作。
Redis6入门到实战------ 八、Redis与Spring Boot整合
|
1月前
|
机器学习/深度学习 存储 数据采集
Elasticsearch 与机器学习的集成
【9月更文第3天】Elasticsearch 不仅仅是一个强大的分布式搜索和分析引擎,它还是一个完整的数据平台,通过与 Kibana、Logstash 等工具结合使用,能够提供从数据采集、存储到分析的一站式解决方案。特别是,Elasticsearch 集成了机器学习(ML)功能,使得在实时数据流中进行异常检测和趋势预测成为可能。本文将详细介绍如何利用 Elasticsearch 的 ML 功能来检测异常行为或预测趋势。
34 4
|
2月前
|
Java API UED
【实战秘籍】Spring Boot开发者的福音:掌握网络防抖动,告别无效请求,提升用户体验!
【8月更文挑战第29天】网络防抖动技术能有效处理频繁触发的事件或请求,避免资源浪费,提升系统响应速度与用户体验。本文介绍如何在Spring Boot中实现防抖动,并提供代码示例。通过使用ScheduledExecutorService,可轻松实现延迟执行功能,确保仅在用户停止输入后才触发操作,大幅减少服务器负载。此外,还可利用`@Async`注解简化异步处理逻辑。防抖动是优化应用性能的关键策略,有助于打造高效稳定的软件系统。
44 2
|
2月前
|
JSON Java API
解码Spring Boot与JSON的完美融合:提升你的Web开发效率,实战技巧大公开!
【8月更文挑战第29天】Spring Boot作为Java开发的轻量级框架,通过`jackson`库提供了强大的JSON处理功能,简化了Web服务和数据交互的实现。本文通过代码示例介绍如何在Spring Boot中进行JSON序列化和反序列化操作,并展示了处理复杂JSON数据及创建RESTful API的方法,帮助开发者提高效率和应用性能。
77 0
|
2月前
|
SQL Java 数据库连接
Spring Boot联手MyBatis,打造开发利器:从入门到精通,实战教程带你飞越编程高峰!
【8月更文挑战第29天】Spring Boot与MyBatis分别是Java快速开发和持久层框架的优秀代表。本文通过整合Spring Boot与MyBatis,展示了如何在项目中添加相关依赖、配置数据源及MyBatis,并通过实战示例介绍了实体类、Mapper接口及Controller的创建过程。通过本文,你将学会如何利用这两款工具提高开发效率,实现数据的增删查改等复杂操作,为实际项目开发提供有力支持。
69 0
|
2月前
|
Java 开发者 Spring
Spring Boot实战宝典:揭秘定时任务的幕后英雄,让业务处理如流水般顺畅,轻松驾驭时间管理艺术!
【8月更文挑战第29天】在现代应用开发中,定时任务如数据备份、报告生成等至关重要。Spring Boot作为流行的Java框架,凭借其强大的集成能力和简洁的配置方式,为开发者提供了高效的定时任务解决方案。本文详细介绍了如何在Spring Boot项目中启用定时任务支持、编写定时任务方法,并通过实战案例展示了其在业务场景中的应用,同时提供了注意事项以确保任务的正确执行。
38 0