SpringBoot集成Elasticsearch7.4实践(三)

SpringBoot集成Elasticsearch7.4 实战(三)

 

一、SpringBoot集成Elasticsearch7.4 实战(一):这些操作都是在CentOS下操作的,主要带大家熟悉下Elasticsearch环境。

  • 1.1.下载& Linux下ElasticSearch安装
  • 1.2.中文分词插件IK
  • 1.3.索引
  • 1.4.如何数据管理

二、SpringBoot集成Elasticsearch7.4 实践(二):在Springboot环境下,利用JAVA环境操作索引。

  • 2.1.新增索引
  • 2.2.查询索引
  • 2.3.删除索引

三、SpringBoot集成Elasticsearch7.4 实践(三):在Springboot环境下,管理数据。

  • 3.1.WEB HTTP提交数据<单条提交、批量提交>
  • 3.2.WEB HTTP方式条件查询
  • 3.3.WEB HTTP删除数据

elasticsearch

1. 数据管理

1.1. 新增数据

1.1.1. 单实例新增

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

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

  • 前端Web端实现

/**
    * @Description 新增数据
    * @param elasticDataVo
    * @return xyz.wongs.weathertop.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.weathertop.palant.vo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import xyz.wongs.weathertop.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.weathertop.base.entiy;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import xyz.wongs.weathertop.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.weathertop.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.weathertop.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

3.相关章节

一、SpringBoot集成Elasticsearch7.4 实战(一)
二、SpringBoot集成Elasticsearch7.4 实战(二)
三、SpringBoot集成Elasticsearch7.4 实战(三)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值