导读

  前二天,写了一篇ElasticSearch7.8.1从入门到精通的(点我直达),但是还没有整合到SpringBoot中,下面演示将ElasticSearch和mysql整合到Spring Boot中,附演示源码。

项目介绍

模仿NBA网站

网址地址:点我直达

接口开发

  1. 将数据库数据导入到ElasticSearch
  2. 通过姓名查找球员
  3. 通过国家或者球队查询球员
  4. 通过姓名字母查找球员

项目搭建

SpringBoot整合ElasticSearch和Mysql

数据库数据

  将百度云盘里的sql,在mysql上运行即可

链接: https://pan.baidu.com/s/1MJaJy8isfVnPha00tlS8_w  密码: u3dg

项目结构

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.cyb</groupId>
<artifactId>yb_search</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>yb_search</name>
<description>Demo project for Spring Boot</description> <properties>
<java.version>1.8</java.version>
</properties> <dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--ElasticSearch相关开始-->
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.8.1</version>
</dependency>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>7.8.1</version>
</dependency>
<!--ElasticSearch相关结束-->
<!--fastjson相关开始-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.73</version>
</dependency>
<!--fastjson相关结束-->
<!--druid相关开始-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.23</version>
</dependency>
<!--druid相关结束-->
<!--mybatis与springboot兼容包相关开始-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.3</version>
</dependency>
<!--mybatis与springboot兼容包相关结束-->
<!--mysql相关开始-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.21</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.21</version>
</dependency> <!--mysql相关结束-->
<!--commons-lang3相关开始-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.11</version>
</dependency>
<!--commons-lang3相关结束-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<!-- <exclusions>-->
<!-- <exclusion>-->
<!-- <groupId>org.junit.vintage</groupId>-->
<!-- <artifactId>junit-vintage-engine</artifactId>-->
<!-- </exclusion>-->
<!-- </exclusions>-->
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies> <build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build> </project>

注意

  我本地安装的ElasticSearch版本是7.8.1,引入pom的ES依赖的话,最好版本一致,否则可能出现版本兼容问题!!!!!!!!!!!

application.properties

# 端口号
server.port=8083
# 数据库配置
spring.datasource.url=jdbc:mysql://localhost:3306/nba?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=root
# 连接池
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# 表明使用Druid连接池
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
#初始化时建立物理连接的个数。
spring.datasource.druid.initial-size=5
#最大连接池数量
spring.datasource.druid.max-active=20
#最小连接池数量
spring.datasource.druid.min-idle=5
#获取连接时最大等待时间,单位毫秒
spring.datasource.druid.max-wait=3000
#是否缓存preparedStatement,也就是PSCache,PSCache对支持游标的数据库性能提升巨大,比如说oracle,在mysql下建议关闭。
spring.datasource.druid.pool-prepared-statements=false
#要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true。在Druid中,不会存在Oracle下PSCache占用内存过多的问题,可以把这个数值配置大一些,比如说100
spring.datasource.druid.max-open-prepared-statements= -1
#配置检测可以关闭的空闲连接间隔时间
spring.datasource.druid.time-between-eviction-runs-millis=60000
# 配置连接在池中的最小生存时间
spring.datasource.druid.min-evictable-idle-time-millis= 300000
spring.datasource.druid.max-evictable-idle-time-millis= 400000
# 日志相关
logging.level.root: info
logging.level.com.cyb.search: debug
# ElasticSearch配置
elasticsearch.host:192.168.199.170
elasticsearch.port=9200

EsConfig.java(ES配置类)

package com.cyb.search.config;

import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; /**
* @ClassName:EsConfig
* @Description:ES配置文件
* @Author:chenyb
* @Date:2020/8/10 11:25 下午
* @Versiion:1.0
*/
@Configuration
//获取application.properties或application.yml获取里面的参数值
@ConfigurationProperties(prefix = "elasticsearch")
public class EsConfig {
private String host;
private Integer port;
//初始化RestHighLevelClient
@Bean(destroyMethod = "close")
public RestHighLevelClient client(){
return new RestHighLevelClient(RestClient.builder(
new HttpHost(host,port,"http")
));
} public String getHost() {
return host;
} public void setHost(String host) {
this.host = host;
} public Integer getPort() {
return port;
} public void setPort(Integer port) {
this.port = port;
}
}

NBAPlayerDao.java

package com.cyb.search.dao;

import com.cyb.search.model.NBAPlayer;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select; import java.util.List; @Mapper
public interface NBAPlayerDao {
@Select("select * from nba_player")
List<NBAPlayer> selectAll();
}

NBAPlayer.java(实体类)

package com.cyb.search.model;

/**
* @ClassName:NBAPlayer
* @Description:TODO
* @Author:chenyb
* @Date:2020/8/10 11:39 下午
* @Versiion:1.0
*/
public class NBAPlayer {
private Integer id;
private String countryEn;
private String country;
private String code;
private String displayAffiliation;
private String displayName;
private Integer draft;
private String schoolType;
private String weight;
private Integer playYear;
private String jerseyNo;
private Long birthDay;
private String birthDayStr;
private String displayNameEn;
private String position;
private Double heightValue;
private String playerId;
private String teamCity;
private String teamCityEn;
private String teamName;
private String teamNameEn;
private String teamConference;
private String teamConferenceEn;
private Integer age;
public String getCountry() {
return country;
} public void setCountry(String country) {
this.country = country;
} public String getBirthDayStr() {
return birthDayStr;
} public void setBirthDayStr(String birthDayStr) {
this.birthDayStr = birthDayStr;
} public Integer getAge() {
return age;
} public void setAge(Integer age) {
this.age = age;
} public String getCode() {
return code;
} public void setCode(String code) {
this.code = code;
} public String getDisplayAffiliation() {
return displayAffiliation;
} public void setDisplayAffiliation(String displayAffiliation) {
this.displayAffiliation = displayAffiliation;
} public String getDisplayName() {
return displayName;
} public void setDisplayName(String displayName) {
this.displayName = displayName;
} public Integer getDraft() {
return draft;
} public void setDraft(Integer draft) {
this.draft = draft;
} public String getSchoolType() {
return schoolType;
} public void setSchoolType(String schoolType) {
this.schoolType = schoolType;
} public String getWeight() {
return weight;
} public void setWeight(String weight) {
this.weight = weight;
} public Integer getPlayYear() {
return playYear;
} public void setPlayYear(Integer playYear) {
this.playYear = playYear;
} public String getCountryEn() {
return countryEn;
} public void setCountryEn(String countryEn) {
this.countryEn = countryEn;
} public String getTeamCityEn() {
return teamCityEn;
} public void setTeamCityEn(String teamCityEn) {
this.teamCityEn = teamCityEn;
} public String getTeamNameEn() {
return teamNameEn;
} public void setTeamNameEn(String teamNameEn) {
this.teamNameEn = teamNameEn;
} public String getTeamConference() {
return teamConference;
} public void setTeamConference(String teamConference) {
this.teamConference = teamConference;
} public String getTeamConferenceEn() {
return teamConferenceEn;
} public void setTeamConferenceEn(String teamConferenceEn) {
this.teamConferenceEn = teamConferenceEn;
} public String getJerseyNo() {
return jerseyNo;
} public void setJerseyNo(String jerseyNo) {
this.jerseyNo = jerseyNo;
} public Long getBirthDay() {
return birthDay;
} public void setBirthDay(Long birthDay) {
this.birthDay = birthDay;
} public String getDisplayNameEn() {
return displayNameEn;
} public void setDisplayNameEn(String displayNameEn) {
this.displayNameEn = displayNameEn;
} public String getPosition() {
return position;
} public void setPosition(String position) {
this.position = position;
} public Double getHeightValue() {
return heightValue;
} public void setHeightValue(Double heightValue) {
this.heightValue = heightValue;
} public String getPlayerId() {
return playerId;
} public void setPlayerId(String playerId) {
this.playerId = playerId;
} public String getTeamCity() {
return teamCity;
} public void setTeamCity(String teamCity) {
this.teamCity = teamCity;
} public String getTeamName() {
return teamName;
} public void setTeamName(String teamName) {
this.teamName = teamName;
} public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
}
}

NBAPlayerService.java(接口)

package com.cyb.search.service;

import com.cyb.search.model.NBAPlayer;

import java.io.IOException;

public interface NBAPlayerService {
boolean addPlayer(NBAPlayer player,String id) throws IOException;
}

NBAPlayerServiceImpl.java

package com.cyb.search.service.impl;

import com.alibaba.fastjson.JSONObject;
import com.cyb.search.model.NBAPlayer;
import com.cyb.search.service.NBAPlayerService;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.cglib.beans.BeanMap;
import org.springframework.stereotype.Service; import javax.annotation.Resource;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map; /**
* @ClassName:NBAPlayerServiceImpl
* @Description:TODO
* @Author:chenyb
* @Date:2020/8/11 10:09 下午
* @Versiion:1.0
*/
@Service
public class NBAPlayerServiceImpl implements NBAPlayerService {
@Resource
private RestHighLevelClient client; /**
* 添加
* @param player 实体类
* @param id 编号
* @return
* @throws IOException
*/
@Override
public boolean addPlayer(NBAPlayer player, String id) throws IOException {
IndexRequest request=new IndexRequest("nba_latest").id(id).source(beanToMap(player));
IndexResponse response = client.index(request, RequestOptions.DEFAULT);
System.out.println(JSONObject.toJSON(response));
return false;
} /**
* 对象转map
* @param bean
* @param <T>
* @return
*/
public static <T> Map<String,Object> beanToMap(T bean){
Map<String,Object> map=new HashMap<>();
if (bean!=null){
BeanMap beanMap=BeanMap.create(bean);
for(Object key:beanMap.keySet()){
if (beanMap.get(key)!=null){
map.put(key+"",beanMap.get(key));
}
}
}
return map;
}
}

基础功能实现

往ES中插入一条数据

查看数据库数据

根据ID查ES 

单元测试

修改

单元测试

删除

单元测试

将数据库中的数据导入ES

通过名字查找球员

测试

通过国家或球队查找球员

测试

通过字母查球员

测试

项目源码下载

链接: https://pan.baidu.com/s/1QJ8wvjg7TPqGSP-68qpSIQ  密码: d26m

Spring Boot整合ElasticSearch和Mysql 附案例源码的更多相关文章

  1. Spring Boot整合Elasticsearch

    Spring Boot整合Elasticsearch   Elasticsearch是一个全文搜索引擎,专门用于处理大型数据集.根据描述,自然而然使用它来存储和搜索应用程序日志.与Logstash和K ...

  2. 【spring boot】【elasticsearch】spring boot整合elasticsearch,启动报错Caused by: java.lang.IllegalStateException: availableProcessors is already set to [8], rejecting [8

    spring boot整合elasticsearch, 启动报错: Caused by: java.lang.IllegalStateException: availableProcessors ], ...

  3. Elasticsearch学习(3) spring boot整合Elasticsearch的原生方式

    前面我们已经介绍了spring boot整合Elasticsearch的jpa方式,这种方式虽然简便,但是依旧无法解决我们较为复杂的业务,所以原生的实现方式学习能够解决这些问题,而原生的学习方式也是E ...

  4. Spring Boot启动命令参数详解及源码分析

    使用过Spring Boot,我们都知道通过java -jar可以快速启动Spring Boot项目.同时,也可以通过在执行jar -jar时传递参数来进行配置.本文带大家系统的了解一下Spring ...

  5. Spring Boot 整合 Elasticsearch,实现 function score query 权重分查询

    摘要: 原创出处 www.bysocket.com 「泥瓦匠BYSocket 」欢迎转载,保留摘要,谢谢! 『 预见未来最好的方式就是亲手创造未来 – <史蒂夫·乔布斯传> 』 运行环境: ...

  6. spring boot 整合 elasticsearch 5.x

    spring boot与elasticsearch集成有两种方式.一种是直接使用elasticsearch.一种是使用data中间件. 本文只指针使用maven集成elasticsearch 5.x, ...

  7. SpringBoot学习入门之Hello项目的构建、单元测试和热部署等(配图文,配置信息详解,附案例源码)

    前言: 本文章主要是个人在学习SpringBoot框架时做的一些准备,参考老师讲解进行完善对SpringBoot构建简单项目的学习汇集成本篇文章,作为自己对SpringBoot框架的总结与笔记. 你将 ...

  8. Spring Boot 整合 elasticsearch

    一.简介 我们的应用经常需要添加检索功能,开源的 ElasticSearch 是目前全文搜索引擎的 首选.他可以快速的存储.搜索和分析海量数据.Spring Boot通过整合Spring Data E ...

  9. Elasticsearch学习(4) spring boot整合Elasticsearch的聚合操作

    之前已将spring boot原生方式介绍了,接下将结介绍的是Elasticsearch聚合操作.聚合操作一般来说是解决一下复杂的业务,比如mysql中的求和和分组,由于博主踩的坑比较多,所以博客可能 ...

随机推荐

  1. 将终结点图添加到你的ASP.NET Core应用程序中

    在本文中,我将展示如何使用DfaGraphWriter服务在ASP.NET Core 3.0应用程序中可视化你的终结点路由.上面文章我向您演示了如何生成一个有向图(如我上篇文章中所示),可以使用Gra ...

  2. wordpress学习笔记

    版本:4.9.8 我用wordpress的初衷是借用它的后台系统,前端用自己的网页显示存在wordpress数据库里的文章. wordpress本质上是个框架,技术栈:web-php-mysql. 初 ...

  3. java大数据最全课程学习笔记(5)--MapReduce精通(一)

    目前CSDN,博客园,简书同步发表中,更多精彩欢迎访问我的gitee pages 目录 MapReduce精通(一) MapReduce入门 MapReduce定义 MapReduce优缺点 优点 缺 ...

  4. Jmeter操作MySQL数据库详解

    一.jmeter操作数据库的原理 jmeter不可直接操作数据库,必须通过驱动程序来间接操作,但如果数据库不是在本地而是云服务器上的话就需要通过网络来操作. jmeter通过驱动程序来完成对MySQL ...

  5. C++语法小记---如何判断一个变量是不是指针

    如何判断一个变量是不是指针? 思路:模板函数 + 可变参数 + sizeof(函数) #include <iostream> #include <string> using n ...

  6. SparkCore

    一.概述 1,定义 RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是Spark中最基本的数据抽象.代码中是一个抽象类,它代表一个不可变.可分区.里面的元素可 ...

  7. python中if及if-else如何使用

    if 结构 if 结构允许程序做出选择,并根据不同的情况执行不同的操作 基本用法 比较运算符 根据 PEP 8 标准,比较运算符两侧应该各有一个空格,比如:5 == 3. PEP8 标准 ==(相等) ...

  8. DJANGO-天天生鲜项目从0到1-012-订单-用户订单页面

    本项目基于B站UP主‘神奇的老黄’的教学视频‘天天生鲜Django项目’,视频讲的非常好,推荐新手观看学习 https://www.bilibili.com/video/BV1vt41147K8?p= ...

  9. 如何利用tox打造自动自动化测试框架,看完就懂

    什么是toxtox官方文档的第一句话 standardize testing in Python,意思就是说标准化python中的测试,那是不是很适合测试人员来使用呢,我们来看看他究竟是什么? 根据官 ...

  10. Django学习路14_获取数据库中用户名字并展示,获取指定条数

    在 views.py 中添加 获取函数 注:此时获取的是全部用户的信息 def get_users(request): users = User.objects.all() context = { ' ...