springboot 整合 ElasticSearch 方法 (一)

news2024/11/23 0:16:26

下载 ES

相当于安装 MySQL, 可以在官网上下载 (链接在后面). 要注意安装的 ES 的版本要和项目中用的 Springboot 的版本对应.

比如我用的 Springboot 版本是 2.6, 所以ES要下载7.15 版本的.

在这里插入图片描述

官网链接: https://www.elastic.co/cn/downloads/elasticsearch

点右边这个查看更多版本, 然后找到对应的版本下载就可以了.

这里我点了以后网页怎么都打不开, 找不到对应的版本下载, 然后我就直接把url改成这样下载到的 (把版本换成了7.15.2, 后缀换成了zip): https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.15.2-windows-x86_64.zip

在这里插入图片描述

安装

下载到安装包以后, 解压这个安装包, 然后点击这个 bat 文件运行就可以了.

在这里插入图片描述

在这里插入图片描述

(看别的文章说, 项目运行的时候这个命令框要开着.)

看到 successfully 以后去 localhost:9200 (这个端口默认是9200) 看一下有没有成功. 像下面这个图一样的结果就是成功了.

localhost:9200

在这里插入图片描述

依赖

pom.xml中引入es依赖:

        <!-- es -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
        </dependency>

说明:
spring-boot-starter-data-elasticsearch 这个依赖是 springboot 重新整合了 ES 的一个依赖, 并不是 ES 本身的依赖.

有些文章中会提到, 安装依赖的时候安装的是 elasticsearch, elasticsearch-rest-high-level-client 之类的 , 这才是 es 本身的依赖 ( 另一篇文章: pringboot 整合 ElasticSearch 方法(二) 中用的就是这种方法).

配置

ES 的配置有两种方式: 一种是把配置信息写在 application.yml 文件中; 另一种是写一个配置类. 两种方法都可以, 写配置类的方法更加灵活.

配置类

新建一个 config 文件夹, 然后把测试类写在这里:

在这里插入图片描述

package com.example.demo.config;

import lombok.Data;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.elasticsearch.client.ClientConfiguration;
import org.springframework.data.elasticsearch.client.RestClients;
import org.springframework.data.elasticsearch.config.AbstractElasticsearchConfiguration;

@Data
@Configuration
public class ElasticConfig extends AbstractElasticsearchConfiguration {

    @Bean
    @Override
    public RestHighLevelClient elasticsearchClient() {

        final ClientConfiguration clientConfiguration = ClientConfiguration.builder()
                .connectedTo("localhost:9200")
//                .withSocketTimeout(600000)
                .build();

        return RestClients.create(clientConfiguration).rest();
    }
}

使用

实体类

package com.example.demo.pojo;

import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;

import java.util.Date;

@Data
@Document(indexName = "log") // 索引的名称
public class Log {

    @Id
    private String id;
    private String content;
    private Date time;

}

说明

实体类中的 id 是必须有的, 不管是String 还是Integer形式的都不影响, 但是要有这个字段. 不然创建mapper这个bean的时候会报错的.

实体类有id这个字段, 存数据的时候, id不是必传的, 不传也不会报错, 不传ES会自动生成id, 下面就是把 id 设置为 String 类型, 存储的时候不传id得到的数据:

在这里插入图片描述

Mapper / Repository

好多文章里写的是新建一个 Repository 文件夹.

mapper 中 extends 了一个方法, 这样就在 LogMapper 中提供了一些基本的增删改查方法, 就不需要再在 mapper 里再自己手动写这些方法了.

extends ElasticsearchRepository 后面第一个参数是实体类的名称(这里是Log), 第二个参数是实体类id的类型(这里Log实体类中id为Integer)

提供的这些方法在测试类里面 @Autowired 注入 logMapper 以后, 输入 logMapper. 也会有提示的.

但是这个依赖提供的 extends ElasticsearchRepository 好像有些 springboot 的版本是不支持的, 就会报各种错以及各种标红 (我试了出错的版本是 springboot 2.10, 处理方法在另一篇文章: pringboot 整合 ElasticSearch 方法(二) 中).

在这里插入图片描述

package com.example.demo.mapper;

import com.example.demo.pojo.Log;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface LogMapper extends ElasticsearchRepository<Log,Integer> {
}

( 这个里面可以不写方法的, 默认会使用一些自带的方法, 没有漏粘代码. )

测试类

这个测试类可以直接写在这个默认的里面就好了. 反正只是测试一下, 真实项目也要改的.

如果新建了测试类, 不要忘记加 @RunWith(SpringRunner.class) 注解(因为配置类是写在config文件夹下面的, 需要 @Autowired 注入一起启动)

注入一下 logMapper, 然后就可以开始写不同的测试类了.

在这里插入图片描述

一些简单的方法:

package com.example.demo;

import com.example.demo.mapper.LogMapper;
import com.example.demo.pojo.Log;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Date;
import java.util.Optional;

@SpringBootTest
class DemoApplicationTests {

    @Autowired
    private LogMapper logMapper;

    @Test
    void add() {
        for(int i=1;i<11;i++) {
            Log log = new Log();
            Date currentDate = new Date();

            log.setId(i);
            log.setContent("this is content"+i);
            log.setTime(currentDate);

            logMapper.save(log);
        }
    }

    @Test
    void delete(){
        Integer id = 1;
        logMapper.deleteById(id);
    }

    @Test
    void update() {
        Log updateLog = new Log();
        Date currentDate = new Date();

        updateLog.setId(2);
        updateLog.setContent("update message");
        updateLog.setTime(currentDate);

        logMapper.save(updateLog);
    }

    @Test
    void find() {
        Iterable<Log> all = logMapper.findAll(); // 查找全部的文档数据, 返回结果是没有顺序的
        ArrayList<Log> list = new ArrayList<>(); // 利用list给返回的结果排序

        for(Log log:all){
            list.add(log);
            System.out.println(log);
        }
        // 使用list的方法实现排序
    }

    @Test
    void findById() {
        Optional<Log> byId = logMapper.findById(4);
        System.out.println(byId);
    }

    @Test
    void findByIdAll() {
        ArrayList<Integer> ids = new ArrayList<>();
        ids.add(1);
        ids.add(2);
        Iterable<Log> allById = logMapper.findAllById(ids);

        // 打印结果
        for(Log log:allById){
            System.out.println(log); // 如果给的id在索引里没有, 就不会输出(这里不会报错的)
        }
    }

}

如果不传id, 不会报错, es会自动生成id的, 如下:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1405210.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

视频监控平台EasyCVR增加fMP4流媒体视频格式及其应用场景介绍

近期我们在视频监控管理平台EasyCVR系统中新增了HTTP-FMP4播放协议&#xff0c;今天我们就来聊聊该协议的特点和应用。 fMP4&#xff08;Fragmented MPEG-4&#xff09;是基于MPEG-4 Part 12的流媒体格式&#xff0c;是流媒体的一项重要技术&#xff0c;因为它能通过互联网传送…

Nuxt2.x Error页面返回自定义请求状态码

一、问题描述 最近接到一个需求&#xff0c;针对Nuxt2.x的一个项目进行SEO优化&#xff0c;需要对404页面的状态进行修改&#xff0c;将404页面的请求状态码改为301&#xff0c;而不是404&#xff1a; 二、解决方案 1.几种无效尝试 &#xff08;1&#xff09;layouts下的err…

InternLM第6次课笔记

OpenCompass 大模型评测 测评什么 如何评测 基座模型&#xff1a;加入instrcut 对话模型&#xff1a;直接对话 评测方式 客观 主观 提示词工程 不同prompt鲁棒性 OpenCompass能力框架

Portainer Docker容器可视化管理平台实践

Portainer Docker容器可视化管理平台实践 引安装登录Remote ENV 实践 引 平常用docker命令操作比较多&#xff0c;找了一款docker可视化工具&#xff0c;方便快速预览和批量操作&#xff0c;不想一行一行敲的时候&#xff0c;可以偷偷懒。Portainer试用了一下&#xff0c;安装…

实施企业增长战略:明确需求和战略咨询公司选择尤为重要

在当今快速变化的商业环境中&#xff0c;企业的增长并非偶然产生的成果&#xff0c;而是通过精心设计和策略性规划实现的。企业要实现增长&#xff0c;明确企业自身需求和选择专业的战略咨询公司是非常重要的。接下来&#xff0c;本文就这两大关键问题进行分析。首先&#xff0…

Linux问题 apt-get install时 无法解析域名“cn.archive.ubuntu.com”

问题描述: 在安装程序时会出现无法解析域名的错误 解决办法: 1、编辑文件 sudo vim /etc/resolv.conf 2、在最后加上(按键 i 进入编辑模式) nameserver 8.8.8.8 3、保存退出(:wq)

基于神经网络的电力系统的负荷预测

一、背景介绍&#xff1a; 电力系统负荷预测是生产部门的重要工作之一&#xff0c;通过准确的负荷预测&#xff0c;可以经济合理地安排机组的启停、减少旋转备用容量、合理安排检修计划、降低发电成本和提高经济效益。负荷预测按预测的时间可以分为长期、中期和短期负荷预测。…

用Axure RP 9制作滑块

制作流程 1.打开界面 放置一个水平线 修改长为400 线段为5 2.放入圆 如图 3.修改圆的长和宽 如图 4.将圆变成动态面板 5.设置交互事件 如图 6.增加交互事件 7.增加 8.修改成跟随水平

低压MOS在变频风扇上的应用-REASUNOS瑞森半导体

一、前言 变频风扇是一种利用变频技术进行调速的风扇&#xff1b;它通过改变电机的工作频率来改变风扇的转速&#xff0c;实现不同的风量变化&#xff0c;将普通的单频电机改造成支持变频的电机&#xff0c;用变频器来控制。 变频风扇有如下几个特点&#xff1a; 1. 节能高效…

协同过滤源代码在真实数据集上运行及优化

最近在做推荐算法相关研究&#xff0c; 先拿一个协同过滤代码练手。 网上找代码很容易&#xff0c;但是大多是讲原理的示例代码&#xff0c;在真实数据集上运行问题特别多。 以一个2w节点的开源数据集为例&#xff08;baby.inter&#xff09; https://github.com/enoche/MM…

13.XXL-JOB应用

XXL-JOB应用 1.介绍 XXL-JOB是大众点评员工徐雪里于2015年发布的分布式任务调度平台 2.XXL-JOB与Quartz的关系 老版本依赖Quartz的定时任务触发&#xff0c;在V2.1.0版本开始移除了Quartz 3.官方地址 官方文档&#xff1a;https://www.xuxueli.com/xxl-job/gitee&#xf…

【云原生】初识Docker,安装以及了解操作命令

一、为什么要使用容器&#xff1f; 背景&#xff1a;以前开发、测试、生产为不同的环境&#xff0c;痛点是发现开发测试以后没问题&#xff0c;但是在生产环境无法运行。给测试、开发、运维人员造成了大量的工作。最终结果是发版更新速度也跟不上&#xff0c;效率低 我认为使…

如何制作自己的实景中国视频地图?

让每一个人都有自己的地图&#xff01; 我们在《水经微图Web版1.5.0发布》一文中&#xff0c;提到了水经微图&#xff08;简称“微图”&#xff09;Web版新增了视频气泡的功能。 现在&#xff0c;我们为你分享一下如何基于此功能&#xff0c;制作一个属于自己的实景中国视频地…

Final Cut Pro v10.7.1中文版 专业级视频剪辑软件 兼容M

Final Cut Pro 是 macOS平台上最好的视频剪辑软件&#xff0c;基于Cocoa编写&#xff0c;支持多路多核心处理器&#xff0c;支持GPU加速&#xff0c;支持后台渲染&#xff0c;可编辑从标清到4K的各种分辨率视频&#xff0c;ColorSync管理的色彩流水线则可保证全片色彩的一致性。…

vue常用指令(v-on)

一、v-on 指令 作用: 为元素绑定事件, 比如: v-on:click,可以简写为 click“方法”绑定的方法定义在 VUE实例的, method属性中 二、代码演示 1、v-on绑定点击事件 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8&quo…

如何做好一个信息系统项目经理,一个项目经理的个人体会和经验总结(三)

前言 今天我们继续聊聊在 项目开发阶段&#xff0c;项目经理需要做好的事情 &#x1f603; 二、项目开发阶段&#xff08;续&#xff09; 4. 控制好项目开发质量 要控制好项目开发质量&#xff0c;主要是依赖测试&#xff0c;好的产品都是靠不断地测试&#xff0c;不断地试…

yum仓库和NFS文件共享服务

一、yum仓库简介&#xff1a; 1.yum仓库简介&#xff1a; yum是一个基于RPM包&#xff08;是Red-Hat Package Manager红帽软件包管理器的缩写&#xff09;构建的软件更新机制&#xff0c;能够自动解决软件包之间的依赖关系。解决了日常工作中的大量查找安装依赖包的时间 为什…

Vue2中CesiumV1.113.0加载离线地图

Vue2中CesiumV1.113.0加载离线地图&#xff0c;本文以天地图为例。 1.使用nodejs获取天地图 新建nodejsdownmap项目文件夹&#xff0c;初始化项目 npm init -y src/index.js // An highlighted block var Bagpipe require(bagpipe) var fs require("fs"); var r…

【python应用】—利用python构造邮件、解析邮件、发送邮件、接收邮件(email、smtplib、imaplib模块)

文章目录 一、前言1、邮件构成二、email模块1、email模块的Message类Message类常用方法2、email.mine模块:构建电子邮件信息MIMEBase类实现3、email.parser模块:解析电子邮件信息4、email.header模块:丰富、解析邮件头5、email.utils模块:其他工具6、email.iterators模块:…

小程序学习-21

目前小程序分包大小有以下限制&#xff1a; 整个小程序所有分包大小不超过 20M单个分包/主包大小不能超过 2M 独立分包&#xff1a;"independent": true