首页 > 其他分享 >SpringBoot整合Easy-ES实现对ES操作

SpringBoot整合Easy-ES实现对ES操作

时间:2024-10-08 19:52:14浏览次数:8  
标签:return SpringBoot public Easy Document id ES String

Easy-ES 简介

Easy-ES 是一个基于 Elasticsearch 的 Java 客户端库,旨在简化与 Elasticsearch 的交互。它为开发者提供了更易用、更高效的 API,帮助他们快速实现数据的索引、查询、更新和删除等操作。

主要特性

  1. 简化的 API

提供直观友好的接口,降低了使用 Elasticsearch 的学习曲线,使得开发者可以快速上手。

  1. 自动映射支持

根据 Java 对象的字段自动生成 Elasticsearch 索引映射,减少手动配置的繁琐。

  1. 灵活的查询 DSL

支持链式调用构建复杂查询,允许用户轻松构造和执行各种查询。

  1. 批量操作

支持批量处理,可以一次性执行多个文档的增、删、改操作,提高性能。

  1. Spring 集成

与 Spring 框架良好集成,支持依赖注入和自动配置,方便在 Spring 应用中使用。

  1. 多种数据格式支持

支持 JSON 和其他数据格式,便于与不同应用程序进行集成。

  1. 灵活的异常处理

提供了一套统一的异常处理机制,方便开发者捕获和处理错误。

  1. 扩展性强

允许开发人员根据需求自定义功能,适应不同的业务场景。

作用

  1. 数据存储与检索

Easy-ES 使得在 Elasticsearch 中存储和检索数据变得简单高效,适合需要处理海量数据的应用场景。

  1. 实 时搜索能力

利用 Elasticsearch 强大的搜索引擎能力,Easy-ES 可以快速实现实时搜索功能,提升用户体验。

  1. 数据分析

支持复杂的数据查询和分析操作,方便开发者在应用中实现数据挖掘和分析功能。

  1. 简化开发流程

减少了与 Elasticsearch 交互时的代码量和复杂度,加快开发速度,提高生产效率。

如何使用Easy-ES做基本操作

依赖

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <!-- lombok插件依赖 -->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <scope>provided</scope>
    </dependency>
    <!-- Easy-Es暂不支持SpringBoot3.X,且推荐Elasticsearch版本为7.14.0 -->
    <dependency>
        <groupId>cn.easy-es</groupId>
        <artifactId>easy-es-boot-starter</artifactId>
        <version>1.1.1</version>
        <exclusions>
            <exclusion>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.elasticsearch.client</groupId>
                <artifactId>elasticsearch-rest-high-level-client</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.elasticsearch</groupId>
                <artifactId>elasticsearch</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.elasticsearch.client</groupId>
        <artifactId>elasticsearch-rest-high-level-client</artifactId>
        <version>7.14.0</version>
    </dependency>

    <dependency>
        <groupId>org.elasticsearch</groupId>
        <artifactId>elasticsearch</artifactId>
        <version>7.14.0</version>
    </dependency>
</dependencies>

配置

easy-es:
  enable: true
  address : 111.229.0.43:9200
  global-config:
    process_index_mode: manual

启动类

@SpringBootApplication
@EsMapperScan("com.easyes.mapper")
public class EasyEsApplication {

    public static void main(String[] args) {
        SpringApplication.run(EasyEsApplication.class, args);
    }

}

mapper

/**
 * @Author:xsp
 * @Description:
 * @name:DocumentMapper
 * @Date:2024/9/13 10:11
 */
public interface DocumentMapper  extends BaseEsMapper<Document> {

}

service

package com.easyes.service;

import com.easyes.entity.Document;

import java.util.List;

/**
 * @Author:xsp
 * @Description:
 * @name:IiDocumentService
 * @Date:2024/9/13 10:12
 */
public interface IDocumentService{
    /**
     * 查询ES所有数据
     * @return 查询Document结果对象集合
     */
    List<Document> findAllData();

    /**
     * 创建索引
     * @return 结果信息
     * @throws Exception
     */
    String createIndex() throws Exception;

    /**
     * 删除索引
     * @return 结果信息
     */
    String deleteIndex();

    /**
     * ES新增数据
     * @param document 新增数据实体类
     * @return 结果信息
     * @throws Exception
     */
    String addData(Document document) throws Exception;

    /**
     * 根据id删除ES数据
     * @param id 需要删除的数据的id
     * @return
     */
    String deleteDataById(String id);

    /**
     * 修改ES数据
     * @param document 修改数据对象
     */
    String updateData(Document document);

    /**
     * 分词匹配查询content字段
     * @param value 查询内容
     * @return
     */
    List<Document> findMatch(String value);

    /**
     * 根据id查询数据
     * @param id 查询id
     * @return
     */
    Document findById(String id);
}

serviceImpl

package com.easyes.service.impl;

import cn.easyes.common.utils.StringUtils;
import cn.easyes.core.conditions.LambdaEsQueryWrapper;
import com.easyes.entity.Document;
import com.easyes.mapper.DocumentMapper;
import com.easyes.service.IDocumentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;

/**
 * @Author:xsp
 * @Description:
 * @name:iDocumentServiceImpl
 * @Date:2024/9/13 10:12
 */

@Service
public class DocumentServiceImpl implements IDocumentService {
    @Autowired
    private DocumentMapper documentMapper;

    /**
     * 查询ES所有数据
     * @return 查询Document结果对象集合
     */
    @Override
    public List<Document> findAllData() {
        LambdaEsQueryWrapper<Document> wrapper = new LambdaEsQueryWrapper<>();
        wrapper.matchAllQuery();
        return documentMapper.selectList(wrapper);
    }
    /**
     * 创建索引
     * @return 结果信息
     * @throws Exception
     */
    @Override
    public String createIndex() throws Exception {
        StringBuilder msg = new StringBuilder();
        String indexName = Document.class.getSimpleName().toLowerCase();
        boolean existsIndex = documentMapper.existsIndex(indexName);
        if (existsIndex){
            throw new Exception("Document实体对应索引已存在,删除索引接口:deleteIndex");
        }
        boolean success = documentMapper.createIndex();
        if (success){
            msg.append("Document索引创建成功");
        }else {
            msg.append("索引创建失败");
        }
        return msg.toString();
    }
    /**
     * 删除索引
     * @return 结果信息
     */
    @Override
    public String deleteIndex() {
        StringBuilder msg = new StringBuilder();
        String indexName = Document.class.getSimpleName().toLowerCase();
        if (documentMapper.deleteIndex(indexName)){
            msg.append("删除成功");
        }else {
            msg.append("删除失败");
        }
        return msg.toString();
    }

    /**
     * ES新增数据
     * @param document 新增数据实体类
     * @return 结果信息
     * @throws Exception
     */
    @Override
    public String addData(Document document) throws Exception {
        if (StringUtils.isEmpty(document.getTitle()) || StringUtils.isEmpty(document.getContent())) {
            throw new Exception("请补全title及content数据");
        }
        document.setCreateTime(new Date());
        documentMapper.insert(document);
        return "Added successfully!";
    }

    /**
     * 根据id删除ES数据
     * @param id 需要删除的数据的id
     * @return
     */
    @Override
    public String deleteDataById(String id) {
        documentMapper.deleteById(id);
        return "Success";
    }

    /**
     * 修改ES数据
     * @param document 修改数据对象
     */
    @Override
    public String updateData(Document document) {
        documentMapper.updateById(document);
        return "Success";
    }


    /**
     * 分词匹配查询content字段
     * @param value 查询内容
     * @return
     */
    @Override
    public List<Document> findMatch(String value) {
        LambdaEsQueryWrapper<Document> wrapper = new LambdaEsQueryWrapper<>();
        wrapper.match(Document::getContent,value);
        wrapper.orderByDesc(Document::getCreateTime);
        List<Document> documents = documentMapper.selectList(wrapper);
        return documents;
    }

    /**
     * 根据id查询数据
     * @param id
     * @return
     */
    @Override
    public Document findById(String id) {
       return null;
    }
}

controller

package com.easyes.controller;

import com.easyes.entity.Document;
import com.easyes.service.IDocumentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * @Author:xsp
 * @Description:
 * @name:DocumentController
 * @Date:2024/9/13 10:10
 */
@RestController
public class DocumentController {
    @Autowired
    private IDocumentService iDocumentService;
    /**
     * 创建索引
     * @return 结果信息
     * @throws Exception
     */
    @GetMapping("/createIndex")
    public String createIndex() throws Exception {
        return iDocumentService.createIndex();
    }

    /**
     * 删除索引
     * @return 结果信息
     */
    @GetMapping("/deleteIndex")
    public String deleteIndex(){
        return iDocumentService.deleteIndex();
    }

    /**
     * 查询ES所有数据
     * @return 查询Document结果对象集合
     */
    @GetMapping("/findAll")
    public List<Document> findAll(){
        return iDocumentService.findAllData();
    }
    /**
     * 根据id查询数据
     * @param id 查询数据的id
     * @return 查询Document结果对象
     */
    @GetMapping("/findById")
    public Document findById(String id){
        return iDocumentService.findById(id);
    }
    /**
     * ES新增数据
     * @param document 新增数据对象
     * @return 结果信息
     * @throws Exception
     */
    @GetMapping("/add")
    public String addData(@RequestBody Document document) throws Exception {
        return iDocumentService.addData(document);
    }

    /**
     * 修改ES数据
     * @param document 修改数据对象
     */
    @GetMapping("/update")
    public String updateData(@RequestBody Document document){
        return iDocumentService.updateData(document);
    }

    /**
     * 根据id删除ES数据
     * @param id 需要删除的数据的id
     * @return
     */
    @GetMapping("/delete")
    public String deleteData(String id){
        return iDocumentService.deleteDataById(id);
    }

    /**
     * 分词匹配查询content字段
     * @param value 查询内容
     * @return
     */
    @GetMapping("/match")
    public List<Document> findMatch(String value){
        return iDocumentService.findMatch(value);
    }
}

标签:return,SpringBoot,public,Easy,Document,id,ES,String
From: https://blog.csdn.net/2301_81405087/article/details/142747766

相关文章

  • AtCoder Beginner Contest 374(D-E)
    A-C:惯例是宝宝题,会打暴力就能过哈D:其实也是暴力dfs,有一个double打错成int(我是猪鼻),卡了我很久#include<bits/stdc++.h>usingnamespacestd;constintmaxn=1e3+10,eps=1e-7;intn,s,t;boolvis[10];doublesum=1e8;structNode{ doublex,y,x1,y1;}a[maxn];doub......
  • Codeforces Round 970 (Div. 3) D. Sakurako‘s Hobby
     链接cf_Sakurako‘sHobby大意:给一堆点和边,并给出点的颜色,输出每个点能遍历到几个黑点思路:1、这些点边里面有拓扑结构,也有环2、先处理拓扑排序的一些点,依次遍历无父节点的即可,之后就会剩下环3、有环的说明每个点都能去到环内任意一点,那么直接就记录一个sum,然后递归......
  • 2024.10.8 test
    nf#34A定义两个长度相等的数列相似,当且仅当每个下标对应值在两个数列中的排名相等。对于一个长\(n\)的排列,定义\(f(A,k)\)表示有多少长\(k\)的排列和\(A\)的至少一个子序列相似。排列\(A\)的值是\(\sum_{k=1}^n[f(A,k)=C_n^k]\)。给出一个排列,有若干位置待定,求值......
  • 免费送源码:Java+spring boot+MySQL springboot社区快递代取服务系统 计算机毕业设计原
    摘 要信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对社区快递代取服务系统等问题,对社区快递代取服务系统进行研究分析,然后开发设计出社区快递代......
  • 图床搭建与工作流优化全方位集成教程:EasyImages2.0与七牛云的搭建与配置+通过 PicGo
    1.准备搭建–简单图床——EasyImage2.01.1前言无意中网上冲浪的时候,发现了一个叫做简单图床——EasyImage的图床,很好用,搭建也很简单。特别鸣谢简单图床——EasyImage作者大大。1.2特点支持WebP格式转换支持仅登录后上传支持设置图片质量支持文字/图片水印支持设置......
  • キーエンスプログラミングコンテスト2024(AtCoder Beginner Contest 374)
    A.Takahashisan2判断一个字符串是否以san结尾usingnamespacereader;intmain(){strings;cin>>s;if(s[s.length()-1]=='n'ands[s.length()-2]=='a'ands[s.length()-3]=='s'){cout<<"Yes";......
  • 202410-Notes for reading
    TDB1.Gravityexperimentswithradiopulsarshttps://ui.adsabs.harvard.edu/abs/2024LRR....27....5F/abstract2.PhD,Porayko,NataliyaKonstantinovna_2019_ProbingtheInterstellarMediumandDarkMatterwithPulsars5.PhD,2020,NataliyaK.PoraykoProbin......
  • Kubernetes的Pod调度:让你的应用像乘坐头等舱!
     一、Kubernetes中Pod调度的重要性在Kubernetes的世界里,Pod调度就像是一个繁忙的交通指挥官,负责把小车(也就是我们的Pod)送到最合适的停车位(节点)。调度不仅关乎资源的合理利用,还关乎应用的“生死存亡”,下面让我们来看看为什么调度这么重要。资源优化:想象一下,如果每辆......
  • Springboot中统一启动多个socketIO
    前言这篇随笔属实没想到一个好名字,起因是在项目中遇到了一个springboot服务会发出多个socket服务的场景,而且我们使用的是socketIO服务,为了减少调试工作和重复的开发工作,让开发在项目中专注于业务编写,因此封装了一个在启动springboot服务时,自动创建socketIONamespace的逻辑依赖......
  • WordPress 6.7即将发布的新功能(和截图)
    我们一直在密切关注WordPress6.7的开发并测试该版本的测试版,它将带来一些令人兴奋的更新和几个新功能。例如,我们很高兴地发现即将发布的版本将附带全新的默认主题,并对块编辑器和站点编辑体验进行大规模改进。在本文中,我们将向您介绍WordPress6.7中的主要功能。每项功能......