springboot 整合 ElasticSearch 方法 (一)

下载 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@Overridepublic 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 {@Idprivate 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 {@Autowiredprivate LogMapper logMapper;@Testvoid 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);}}@Testvoid delete(){Integer id = 1;logMapper.deleteById(id);}@Testvoid update() {Log updateLog = new Log();Date currentDate = new Date();updateLog.setId(2);updateLog.setContent("update message");updateLog.setTime(currentDate);logMapper.save(updateLog);}@Testvoid find() {Iterable<Log> all = logMapper.findAll(); // 查找全部的文档数据, 返回结果是没有顺序的ArrayList<Log> list = new ArrayList<>(); // 利用list给返回的结果排序for(Log log:all){list.add(log);System.out.println(log);}// 使用list的方法实现排序}@Testvoid findById() {Optional<Log> byId = logMapper.findById(4);System.out.println(byId);}@Testvoid 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.mzph.cn/news/643389.shtml

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

相关文章

展厅设计更好的方法

一、与公司形象契合 在展厅规划时必定要留意公司的LOGO、主色调&#xff0c;以及企业文明。在展现时使用丰满的展厅规划传达出企业的理念。而在功用设置上&#xff0c;应当考虑内涵功用&#xff0c;从展厅作业人员的视点动身&#xff0c;为展厅作业人员提供杰出的环境&#xff…

【Java】---反射:Class、Filed、Constructor、Method

【Java】—反射 文章目录 【Java】---反射一、反射1.1 概念1.2 操作步骤 二、Class类2.1 概念2.2 方法2.2.1 getName()2.2.2 getSimpleName()2.2.3 getPackage()2.2.4 getSuperclass()2.2.5 getInterfaces() 三、Field类3.1 概念3.2 方法3.2.1 setAccessible(Boolean b)3.2.2 s…

关于图像分割项目的可视化脚本

1. 前言 之前实现了目标检测和图像分类任务的可视化脚本&#xff0c;本章将最后一个分割任务的可视化脚本实现 效果展示如下&#xff1a; 代码会在当前目录保存展示好的图片&#xff0c;从左到右依次为&#xff0c;原图、mask图、mask覆盖在原图的掩膜图 关于目标检测的可视化…

【二】从零到1设计一个丧葬行业小程序

1、准备工作 1-1、服务器准备 腾讯云轻量级服务器 4核2G 地址: http://1.14.34.13/ 购买域名 www.pengyangyan.work &#xff08;备案中&#xff09; 图片服务器&#xff1a;七牛云 1-2、环境配置 服务器 docker容器部署 https://blog.csdn.net/pengyangyan/article/d…

app如何实现悬浮框滚动到那个模块定位到那。

如图&#xff1a; 使用uniapp内置方法 onPageScroll 获取到滚动了多少。 其实拿到屏幕滚动多少就很简单了&#xff0c;下面是思路。 tap栏切换效果代码就不贴了。直接贴如何到那个模块定位到哪&#xff0c;和点击定位到当前模块。 <view v-if"show" class&qu…

HarmonyOS鸿蒙应用开发( 四、重磅组件List列表组件使用详解)

List列表组件&#xff0c;是一个非常常用的组件。可以说在一个应用中&#xff0c;它的身影无处不在。它包含一系列相同宽度的列表项&#xff0c;适合连续、多行呈现同类数据&#xff0c;如商品列表、图片列表和和文本列表等。ArkUI 框架采用 List 容器组件创建列表&#xff08;…

某国有企业后备人才培养机制建设

某电力勘测设计院始建于1958年&#xff0c;是中国电力建设集团有限公司旗下的大型电力工程咨询公司。伴随着中国电力事业的发展&#xff0c;已发展为具备甲级电力工程规划、咨询、勘测、设计、总承包、环境及安全管理评价、地质灾害勘察、评估与治理、光电建筑一体化及发电专项…

大数据学习之Flink算子、了解DataStream API(基础篇一)

DataStream API &#xff08;基础篇&#xff09; 注&#xff1a; 本文只涉及DataStream 原因&#xff1a;随着大数据和流式计算需求的增长&#xff0c;处理实时数据流变得越来越重要。因此&#xff0c;DataStream由于其处理实时数据流的特性和能力&#xff0c;逐渐替代了DataSe…

Windows下安装达梦8开发版数据库

达梦数据库属于国产主流数据库之一&#xff0c;本文记录WIndows下安装最新的达梦8数据库的过程。   达梦官网&#xff08;参考文献1&#xff09;下载开发版&#xff08;X86平台&#xff09;版安装包&#xff0c;如下图所示&#xff1a; 解压安装包后&#xff0c;其中包含ISO文…

Unity中UGUI在Mask剪裁粒子特效的实现

在Unity使用Mask是剪裁不了粒子特效的&#xff0c;之前有想过RenderTexture来实现&#xff0c;不过使用RenderTexture不适合用于很多个特效&#xff0c;因为RenderTexture依赖Camera的照射&#xff0c;如果在背包中每种道具都有不同的特效&#xff0c;那使用RenderTexture则需要…

Armv8-M的TrustZone技术之SAU寄存器总结

每个SAU寄存器是32位宽。下表显示了SAU寄存器概要。 5.1 SAU_CTRL register SAU_CTRL寄存器的特征如下图和表所示&#xff1a; 5.2 SAU_TYPE register 5.3 SAU_RNR register 5.4 SAU_RBAR register 5.5 SAU_RLAR register 5.6 SAU区域配置 当SAU启用时&#xff0c;未由已启用…

【技术】SpringBoot 接口怎么加密解密

1. 介绍 在我们日常的Java开发中&#xff0c;免不了和其他系统的业务交互&#xff0c;或者微服务之间的接口调用 如果我们想保证数据传输的安全&#xff0c;对接口出参加密&#xff0c;入参解密。 但是不想写重复代码&#xff0c;我们可以提供一个通用starter&#xff0c;提…

go 依赖注入设计与实现

在现代的 web 框架里面&#xff0c;基本都有实现了依赖注入的功能&#xff0c;可以让我们很方便地对应用的依赖进行管理&#xff0c;同时免去在各个地方 new 对象的麻烦。比如 Laravel 里面的 Application&#xff0c;又或者 Java 的 Spring 框架也自带依赖注入功能。 今天我们…

C++高精度问题

高精度前言 C中int不能超过2^31-1&#xff0c;最长的long long也不能超过2^63-1,所以我们在题目中如果碰到了很长很长的数&#xff0c;并且需要进行大数运算时&#xff0c;就需要高精度存储。 高精度总体思路 由于int和long long的限制&#xff0c;我们要想存放很长的数就需…

Power Apps 向Power Automate传一个数组参数

Power Apps传Power Automate数组参数 背景Power Apps传参方法画布开发我们现在power apps中设置一个集合**ArrCollect**准备一个按钮 Power Automate接收总结画布流 背景 我们通常会从Power Apps界面传递参数给Flow中&#xff0c;但是很多时候仅仅是一个字符串类型的已经不适用…

二进制计算

二进制的引入 十进制规则:满10进1&#xff0c;由数字0到9组成。 而所谓十六进制&#xff0c;八进制&#xff0c;二进制的规则也是类似。 这里为了区分十六进制和八进制&#xff0c;十六进制前面会加上0x&#xff0c;八进制前面会加个0作为区分 而二进制的规则类似于十进制&…

PLC协议转BACnet网关BA107

随着通讯技术和控制技术的发展&#xff0c;为了实现楼宇的高效、智能化管理&#xff0c;集中监控管理已成为楼宇智能管理发展的必然趋势。在此背景下&#xff0c;高性能的楼宇暖通数据传输解决方案——协议转换网关应运而生&#xff0c;广泛应用于楼宇自控和暖通空调系统应用中…

精品基于Uniapp+springboot智能家居环境检测App

《[含文档PPT源码等]精品基于Uniappspringboot智能家居环境检测App》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功&#xff01; 软件开发环境及开发工具&#xff1a; 开发语言&#xff1a;Java 后台框架&#xff1a;springboot、ssm …

HTTP3/QUIC 性能测试与配套组件

背景 最近一年很多关于QUIC的文章层出&#xff0c;但是发现一个问题&#xff0c;这些文章都是在介绍QUIC或HTTP3是怎样的一个东西&#xff0c;以及它的优点和机制&#xff0c;将它夸的近乎上天了。然而有心的人估计会亲手做一些测试&#xff0c;就会发现这个被捧上天的东西性能…