SpringBoot初级开发--加入ElasticSearch数据源(4)

news2024/11/23 21:52:08

  ES就不用我说了吧,如果是安装的话可以参考我这边blog《Centos7.9安装ElasticSearch6》,安装好ES,接下来我们配置SpringBoot.在配置之前,先看看版本对应表。
在这里插入图片描述
1.修改POM文件的依赖

 <!-- ES  默认对应springboot的版本 -->
 <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
  </dependency>

2.增加application.properties配置文件属性值

spring.elasticsearch.uris=http://10.10.52.155:9200
spring.data.elasticsearch.repositories.enabled=true
spring.data.elasticsearch.repositories.cluster-name=elasticsearch
spring.data.elasticsearch.repositories.cluster-nodes=10.10.52.155:9300

紧接上一章的工程,我们在model层下增加一个po实体

package com.example.firstweb.model.po;


import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;

@Getter
@Setter
@Data
@Document(indexName = "esinfoindex")
public class EsInfoPo {
    @Id
    private  Long id;

    @Field(type = FieldType.Keyword)
    private String title;

    @Field(type = FieldType.Text,analyzer = "ik_max_word")
    private String content;

}

Spring Data通过注解来声明字段的映射属性,有下面的三个注解:
@Document 作用在类,标记实体类为文档对象,一般有两个属性
    indexName:对应索引库名称
    type:对应在索引库中的类型
    shards:分片数量,默认5
    replicas:副本数量,默认1
  
@Id 作用在成员变量,标记一个字段作为id主键
  
@Field 作用在成员变量,标记为文档的字段,并指定字段映射属性:
    type:字段类型,是枚举:FieldType,可以是text、long、short、date、integer、object等
    
text:存储数据时候,会自动分词,并生成索引
    
keyword:存储数据时候,不会分词建立索引
    
Numerical:数值类型,分两类
      基本数据类型:long、interger、short、byte、double、float、half_float
      浮点数的高精度类型:scaled_float
      需要指定一个精度因子,比如10或100。elasticsearch会把真实值乘以这个因子后存储,取出时再还原。
    
Date:日期类型
      elasticsearch可以对日期格式化为字符串存储,但是建议我们存储为毫秒值,存储为long,节省空间。
    
index:是否索引,布尔类型,默认是true
    
store:是否存储,布尔类型,默认是false
    
analyzer:分词器名称,这里的ik_max_word即使用ik分词器

接下来编些DAO层的代码EsInfoDao

package com.example.firstweb.dao;

import com.example.firstweb.model.po.EsInfoPo;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface EsInfoDao extends ElasticsearchRepository<EsInfoPo, Long> {
}

在编写完Dao层代码后,开始编写Service代码

package com.example.firstweb.service;

import com.example.firstweb.dao.EsInfoDao;

import com.example.firstweb.model.po.EsInfoPo;
import org.elasticsearch.index.query.MultiMatchQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.data.domain.PageRequest;

import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
import org.springframework.data.elasticsearch.core.SearchHits;

import org.springframework.data.elasticsearch.core.query.NativeSearchQuery;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import org.springframework.data.elasticsearch.core.SearchHit;
import org.springframework.stereotype.Service;

import java.util.stream.Collectors;

@Service
public class EsInfoService {

    @Autowired
    private EsInfoDao esInfoDao;

    @Autowired
    private ElasticsearchRestTemplate elasticsearchRestTemplate;

    public EsInfoPo save(EsInfoPo esInfo){
        return  esInfoDao.save(esInfo);
    }

    public void searchContent(){

        MultiMatchQueryBuilder multiMatchQuery = QueryBuilders.multiMatchQuery("长城","title","content");

        NativeSearchQuery searchQuery = new NativeSearchQueryBuilder()
                .withQuery(multiMatchQuery)
                .withPageable(PageRequest.of(0, 10))//分页
                .build();
        SearchHits<EsInfoPo> search = elasticsearchRestTemplate.search(searchQuery,EsInfoPo.class);

        System.out.println("total hits:"+search.getTotalHits());

        System.out.println(search.getSearchHits().stream().map(SearchHit::getContent).collect(Collectors.toList()));

    }
}

Service代码写完后,直接写测试用例代码,然后运行测试用例。这里有个注意的地方就是在运行之前,要去建立索引,可以用ElasticSearch-Head去建立 一个esinfoindex的索引,并且运行的ES在elasticsearch.yml属性中加上xpack.security.enabled: false属性。

Elasticsearch现在的新版本已经弃用了ElasticsearchTemplate类,Repository里原来的search方法也已经弃用了。现在都是用ElasticsearchRestTemplate类实现。

package com.example.firstweb;

import com.example.firstweb.dao.EsInfoDao;
import com.example.firstweb.model.po.EsInfoPo;
import com.example.firstweb.service.EsInfoService;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories;
import org.springframework.test.context.junit4.SpringRunner;


@SpringBootTest
class FirstwebApplicationTests {
    @Autowired
    private EsInfoService esInfoService;

    @Test
    void contextLoads() {
    }

    @Test
    void testEs(){
        EsInfoPo esi= new EsInfoPo();
        esi.setId(new Long(1));
        esi.setTitle("中国长城");
        esi.setContent("姚明夺得男篮世界杯八强");
        esInfoService.save(esi);

        esInfoService.searchContent();
    }
}

在Springboot中直接运行FirstwebApplicationTests ,得到如下结果
在这里插入图片描述
并且在ElasticSearch-Head中可以查看到建立的那条索引
在这里插入图片描述
工程源代码可以在这里获得:链接: https://pan.baidu.com/s/1hAvFotdKwXxg80tNVLOz4w 提取码: wz4a

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

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

相关文章

未来科技城携手加速科技 共建集成电路测试公共服务平台!

8月26日&#xff0c;2023未来产业发展大会在杭州未来科技城国际会议中心开幕&#xff01;会上&#xff0c;发布了未来科技城培育发展未来产业行动计划&#xff0c;启动了未来产业发展共同体&#xff0c;进行了未来产业公共服务平台签约仪式。未来科技城与加速科技签约共建集成电…

Linux枚举文件目录、获取文件属性

目录 1.枚举指定路径下的文件目录2.获取文件属性stat其他方式&#xff1a;Linux获取文件属性stat()、fstat()、lstat()函数实现stat属性代码 1.枚举指定路径下的文件目录 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <dirent.…

java+springboot+mysql水电管理系统

项目介绍&#xff1a; 本系统为新版基于SpringBoot的水电管理系统&#xff1a; 使用javaspringbootmysql开发的水电费管理系统&#xff0c;系统包含超级管理员&#xff0c;系统管理员、用户角色&#xff0c;功能如下&#xff1a; 超级管理员&#xff1a;管理员管理、用户管理…

成功通过技术面试的策略:程序员必备指南

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

2023-8-28 图中点的层次(树与图的广度优先遍历)

题目链接&#xff1a;图中点的层次 #include <iostream> #include <cstring> #include <algorithm>using namespace std;const int N 100010;int h[N], e[N], ne[N], idx; int n, m; int q[N], d[N];void add(int a, int b) {e[idx] b, ne[idx] h[a], h…

小蜗语音工具1.9、文本,小说,字幕生成语音、多角色对话,语音识别、读取音频字幕

小蜗语音免费工具 一、文本转字幕文本内容和TXT文件 二、文本转语音1、文本内容生成语音2、字幕生成语音3、多角色对话4、选择文件5、批量处理 三、语音识别、音频MP31、语音识别2、下载模型下载地址 一、文本转字幕 可以把正本小说&#xff0c;生成字幕文件。不限制文件的大小…

Exchange-CVE-2020-0688(RCE)

漏洞描述 当攻击者通过各种手段获得一个可以访问Exchange Control Panel &#xff08;ECP&#xff09;组件的用户账号密码&#xff0c;就可以在被攻击的exchange上执行任意代码&#xff0c;直接获取服务器权限。 CVE-2020-0688也是因为viewstate反序列化 漏洞版本 利用条件&…

雅思听力考点词 积累

目录 雅思听力4个部分 雅思听力答题策略 雅思听力12大场景词汇 1 求职 2 图书馆 3 生活 4 天气地形 5 医疗 6 旅游 7 住宿 8 入学 9 运动 10 环境 11 教育 12 音乐 雅思听力 Part 1 4.1 听力Part 1主要内容 4.2 听力Part 1主要题型&#xff1a;Form Completi…

jq插件:jqgrid和validform的二次封装

做久了vue和react框架项目&#xff0c;偶尔也需要做做原生的项目。不可否认vue的双向绑定机制确实很香&#xff0c;但是也是建立在原生js基础上。所以&#xff0c;只有做更多的原生js项目&#xff0c;才能更加了解vue框架的底层原理。在日常开发中&#xff0c;也会不可避免的会…

element-ui 弹窗里面嵌套弹窗,解决第二个弹窗被遮罩层掩盖无法显示的问题

当我们在 element-ui 中使用弹窗嵌套弹窗时&#xff0c;会出现第二个弹窗打开时被一个遮罩层挡着&#xff0c;就像下面这样&#xff1a; 下面提供两种解决方案 &#xff1a; 一、第一种方案 我们查询element-ui 官网可以发现 el-dialog 有这样几个属性&#xff1a; 具体使用就…

【C语言基础】const关键词的使用方法

&#x1f4e2;&#xff1a;如果你也对机器人、人工智能感兴趣&#xff0c;看来我们志同道合✨ &#x1f4e2;&#xff1a;不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 &#x1f4e2;&#xff1a;文章若有幸对你有帮助&#xff0c;可点赞 &#x1f44d;…

App卡帧与BlockCanary

作者&#xff1a;图个喜庆 一&#xff0c;前言 app卡帧一直是性能优化的一个重要方面&#xff0c;虽然现在手机硬件性能越来越高&#xff0c;明显的卡帧现象越来越少&#xff0c;但是了解卡帧相关的知识还是非常有必要的。 本文分两部分从app卡帧的原理出发&#xff0c;讨论屏…

《Flink学习笔记》——第六章 Flink的时间和窗口

6.1 时间语义 6.1.1 Flink中的时间语义 对于一台机器而言&#xff0c;时间就是系统时间。但是Flink是一个分布式处理系统&#xff0c;多台机器“各自为政”&#xff0c;没有统一的时钟&#xff0c;各自有各自的系统时间。而对于并行的子任务来说&#xff0c;在不同的节点&…

mysql 8 jdbc连接报错:Caused by: java.sql.SOLNonTransientConnectionException: Cannot load connection clas

问题现象&#xff1a;如下图所示&#xff1a; 错误信息为&#xff1a; Caused by: java.sql.SOLNonTransientConnectionException: Cannot load connection class because of underlying exception: com.mysql.cj.e 32 xceptions.WrongArgumentException: Malformed database …

高亮img、pdf重点部分(html2canvas、pdfjs-dist、react-pdf)

可用业务场景 报销单据审批中&#xff0c;高亮发票部分 需求 后台返回一张图片或者pdf、返回一组坐标&#xff0c;坐标类型[number,number,number,number]&#xff0c;分别代表了x、y、width、height。需要根据坐标在图片上高亮出来坐标位置。如下图 高亮的坐标是&#xff1…

java-便签

--其实最痛的。不是离别。而是离别后的那些回忆。 java length( ) javalength中文占多长 1.一个中文字符或符号 2 个字节&#xff0c;一个英文字符或符号 1 个字节。 System.out.println("abc你好&#xff0c;".getBytes("gbk").length); System.out.pr…

Nuxt 菜鸟入门学习笔记四:静态资源

文章目录 public 目录assets 目录全局样式导入 Nuxt 官网地址&#xff1a; https://nuxt.com/ Nuxt 使用以下两个目录来处理 CSS、fonts 和图片等静态资源&#xff1a; public 目录 public 目录用作静态资产的公共服务器&#xff0c;可通过应用程序定义的 URL 公开获取。 换…

nvm安装及使用说明

1.说明&#xff1a; nvm 一个nodejs版本管理工具&#xff01; 2.官网&#xff1a;https://nvm.uihtm.com/ 3.卸载node.js&#xff08;没安装的话忽略&#xff09; 4.下载 链接&#xff1a;https://nvm.uihtm.com/nvm-1.1.10-setup.zip 5.nvm安装 卸载之前的node后安装nvm…

<C++> SSE指令集

SSE指令集 include库 #include <mmintrin.h> //MMX #include <xmmintrin.h> //SSE(include mmintrin.h) #include <emmintrin.h> //SSE2(include xmmintrin.h) #include <pmmintrin.h> //SSE3(include emmintrin.h) #include <tmmintrin.h> /…

外部库/lib/maven依赖项 三者关系

外部库(存放项目初始配置的jar包)(它的文件夹里并没有包含lib文件夹的引的外部的依赖的jar包) lib(存放外部导入到项目的依赖的jar包) maven依赖项(管理项目所有的jar包依赖) 三者存放jar包的关系 项目所依赖的全部的jar包 maven依赖项的jar包 外部库中的jar包 lib中的…