【极光系列】springBoot集成elasticsearch
一.gitee地址
直接下载解压可用 https://gitee.com/shawsongyue/aurora.git
模块:aurora_elasticsearch
二.windows安装elasticsearch
tips:注意es客户端版本要与java依赖版本一致,目前使用7.6.2版本
elasticsearch 7.6.2版本客户端下载: https://www.elastic.co/cn/downloads/elasticsearch
1.下载对应版本资源包
登录页面–》View path releases–》选择7.6.2版本–》window下载
2.解压缩,启动服务
直接点击E:\elasticsearch-7.6.2\bin\elasticsearch.bat启动
三.springBoot集成elasticsearch步骤
1.引入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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.xsy</groupId>
<artifactId>aurora_elasticsearch</artifactId>
<version>1.0-SNAPSHOT</version>
<!--基础SpringBoot依赖-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.5.RELEASE</version>
</parent>
<!--属性设置-->
<properties>
<!--java_JDK版本-->
<java.version>1.8</java.version>
<!--maven打包插件-->
<maven.plugin.version>3.8.1</maven.plugin.version>
<!--编译编码UTF-8-->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!--输出报告编码UTF-8-->
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<!--json数据格式处理工具-->
<fastjson.version>1.2.75</fastjson.version>
<!--json数据格式处理工具-->
<xxljob.version>2.3.0</xxljob.version>
<!--elasticsearch依赖-->
<elasticsearch.version>7.6.2</elasticsearch.version>
</properties>
<!--通用依赖-->
<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>
</dependency>
<!-- json -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson.version}</version>
</dependency>
<!--es start-->
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>${elasticsearch.version}</version>
</dependency>
<!--es end-->
</dependencies>
<!--编译打包-->
<build>
<finalName>${project.name}</finalName>
<!--资源文件打包-->
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
<!--插件统一管理-->
<pluginManagement>
<plugins>
<!--maven打包插件-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring.boot.version}</version>
<configuration>
<fork>true</fork>
<finalName>${project.build.finalName}</finalName>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
<!--编译打包插件-->
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven.plugin.version}</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<encoding>UTF-8</encoding>
<compilerArgs>
<arg>-parameters</arg>
</compilerArgs>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
<!--配置Maven项目中需要使用的远程仓库-->
<repositories>
<repository>
<id>aliyun-repos</id>
<url>https://maven.aliyun.com/nexus/content/groups/public/</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<!--用来配置maven插件的远程仓库-->
<pluginRepositories>
<pluginRepository>
<id>aliyun-plugin</id>
<url>https://maven.aliyun.com/nexus/content/groups/public/</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</project>
2.修改application配置
#服务配置
server:
#端口
port: 7005
#spring配置
spring:
#应用配置
application:
#应用名
name: aurora_elasticsearch
#es配置
elasticsearch:
host: localhost
port: 9200
scheme: http
3.包结构
4.创建主启动类
package com.aurora;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @author 浅夏的猫
* @description 主启动类
* @date 22:46 2024/1/13
*/
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
5.创建配置类
package com.aurora.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.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @description es配置
* @author 浅夏的猫
* @datetime 6:14 2024/1/20
*/
@Configuration
public class ElasticsearchConfig {
@Value("${elasticsearch.host}")
private String host;
@Value("${elasticsearch.port}")
private int port;
@Value("${elasticsearch.scheme}")
private String scheme;
@Bean
public RestHighLevelClient restHighLevelClient() {
return new RestHighLevelClient(
RestClient.builder(new HttpHost(host, port, scheme)));
}
}
6.创建工具类
package com.aurora.utils;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.client.indices.CreateIndexResponse;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.rest.RestStatus;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.io.IOException;
@Component
public class ElasticsearchUtil {
@Autowired
private RestHighLevelClient restHighLevelClient;
public boolean createIndex(String index) {
boolean ackFlag = false;
CreateIndexRequest request = new CreateIndexRequest(index);
try {
CreateIndexResponse response = restHighLevelClient.indices().create(request, RequestOptions.DEFAULT);
ackFlag = response.isAcknowledged();
} catch (IOException e) {
e.printStackTrace();
}
return ackFlag;
}
public boolean indexDocument(String index, String id, String jsonSource) {
boolean ackFlag = false;
IndexRequest request = new IndexRequest(index)
.id(id)
.source(jsonSource, XContentType.JSON);
try {
IndexResponse response = restHighLevelClient.index(request, RequestOptions.DEFAULT);
ackFlag = response.status() == RestStatus.CREATED || response.status() == RestStatus.OK;
} catch (IOException e) {
e.printStackTrace();
}
return ackFlag;
}
public String getDocument(String index, String id) {
GetRequest getRequest = new GetRequest(index, id);
String sourceAsString = null;
try {
sourceAsString = restHighLevelClient.get(getRequest, RequestOptions.DEFAULT).getSourceAsString();
} catch (IOException e) {
e.printStackTrace();
}
return sourceAsString;
}
public boolean updateDocument(String index, String id, String jsonSource) {
boolean ackFLag = false;
UpdateRequest request = new UpdateRequest(index, id)
.doc(jsonSource, XContentType.JSON);
try {
UpdateResponse response = restHighLevelClient.update(request, RequestOptions.DEFAULT);
ackFLag = response.status() == RestStatus.CREATED || response.status() == RestStatus.OK;
} catch (IOException e) {
e.printStackTrace();
}
return ackFLag;
}
public boolean deleteDocument(String index, String id) {
boolean ackFlag = false;
DeleteRequest request = new DeleteRequest(index, id);
try {
DeleteResponse response = restHighLevelClient.delete(request, RequestOptions.DEFAULT);
ackFlag = response.status() == RestStatus.OK;
} catch (IOException e) {
e.printStackTrace();
}
return ackFlag;
}
}
7.创建控制类
package com.aurora.controller;
import com.alibaba.fastjson.JSONObject;
import com.aurora.utils.ElasticsearchUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @description 资源控制类
* @author 浅夏的猫
* @datetime 6:21 2024/1/20
*/
@RestController
@RequestMapping("resource")
public class ElasticsearhController {
private static Logger logger = LoggerFactory.getLogger(ElasticsearhController.class);
@Autowired
private ElasticsearchUtil elasticsearchUtil;
@RequestMapping("esOperate")
public String esOperate(){
String index="aurora-20240120";
JSONObject esJsonObj = new JSONObject();
String id="aurora002";
esJsonObj.put("id",id);
esJsonObj.put("resourceName","aurora源码下载包");
esJsonObj.put("resourceUrl","http://baidu.com");
esJsonObj.put("resourceType","1");
esJsonObj.put("resourceDescribe","aurora资源下载包,大概10M");
//插入
boolean insertFlag = elasticsearchUtil.indexDocument(index, id, esJsonObj.toString());
logger.info("插入数据是否成功:{}",insertFlag);
//查询
String document = elasticsearchUtil.getDocument(index,id);
logger.info("从es索引查询数据:{}",document);
//更新
boolean updateFlag = elasticsearchUtil.updateDocument(index, id, esJsonObj.toString());
logger.info("更新数据是否成功:{}",updateFlag);
//删除
boolean deleteFlag = elasticsearchUtil.deleteDocument(index, id);
logger.info("删除数据是否成功:{}",deleteFlag);
//查询
String documentDelete = elasticsearchUtil.getDocument(index,id);
logger.info("删除后,查询es索引查询数据:{}",documentDelete);
return "ok";
}
}
8.访问地址验证
http://localhost:7005/resource/esOperate