ElasticSearch整合SpringBoot搭建配置

目录
  • 前言
  • 项目搭建
  • 配置客户端
  • 索引API初探 & Index API
    • ping
    • 创建索引 & create
    • 索引是否存在 & exist
    • 删除索引
  • 结束语

前言

目前正在出一个Es专题系列教程, 篇幅会较多, 请持续关注我们

本节来给大家讲一下在Springboot中如何整合es~

本文偏实战一些,为了方便演示,本节示例沿用上节索引,好了, 废话不多说直接开整吧~

项目搭建

老规矩,先建maven项目,下面是我的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>org.example</groupId>
    <artifactId>springboot-es-all</artifactId>
    <version>1.0-SNAPSHOT</version>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.3.RELEASE</version>
    </parent>
    <dependencies>
        <!--test-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
        <!--ElasticSearch 客户端依赖-->
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-client</artifactId>
            <version>7.8.0</version>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>7.8.0</version>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-high-level-client</artifactId>
            <version>7.8.0</version>
        </dependency>
        <!--Hutool依赖-->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.8.4</version>
        </dependency>
        <!--fast-json-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.58</version>
        </dependency>
        <dependency>
            <groupId> org.slf4j </groupId>
            <artifactId> slf4j-api </artifactId>
            <version> 1.6.4 </version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <version>1.7.25</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.1.3.RELEASE</version>
            </plugin>
        </plugins>
    </build>
</project>

这里我使用的是elasticsearch-rest-high-level-client官方客户端,建议大家尽量用官方的,因为随着es的不断升级,很多api都过时了,如果你使用spring-boot-starter-data-elasticsearch这个要依赖社区去维护,很多新特性你没法使用到,也会存在安全性问题。

配置客户端

启动类:

@SpringBootApplication
public class EsStudyApplication {
    public static void main(String[] args) {
        SpringApplication.run(EsStudyApplication.class, args);
    }
}

配置文件 application.yml:

server:
  port: 9000
elasticsearch:
  host: 0.0.0.0
  port: 9200
  username:
  password:

客户端配置 config.EsClientConfig:

@Configuration
public class EsClientConfig {
    @Value("${elasticsearch.host}")
    private String host;
    @Value("${elasticsearch.port}")
    private int port;
    @Value("${elasticsearch.username}")
    private String userName;
    @Value("${elasticsearch.password}")
    private String password;
    @Bean
    public RestHighLevelClient restHighLevelClient() {
        final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
        credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(userName, password));
        RestHighLevelClient restHighLevelClient = new RestHighLevelClient(
                RestClient.builder(new HttpHost( host, port, "http")).setHttpClientConfigCallback(httpClientBuilder -&gt; {
                    httpClientBuilder.setMaxConnTotal(500);
                    httpClientBuilder.setMaxConnPerRoute(300);
                    return httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
                })
        );
        return restHighLevelClient;
    }
}

然后客户端我们就配好了,客户端的配置其实还有很多,感兴趣的同学自行查阅。后续使用的时候,直接导入RestHighLevelClient实例就好了

接着启动它,如果控制没有报错,说明配置没啥问题了, 记得要开启es服务~

索引API初探 & Index API

下面我们写一点测试用例,来验证我们是否可以操作es,为了方便演示,这里直接使用SpringBootTest来测试,大家平时在写springboot项目,类测试的时候也可以这么做

ping

新建api.IndexApi,调用ping()方法来测试是否链接成功:

@Slf4j
@SpringBootTest
public class IndexApi {
    /**
     * es 索引
     */
    public static final String index = "study";
    @Autowired
    private RestHighLevelClient client;
    @Test
    public void ping() throws IOException {
        if(client.ping(RequestOptions.DEFAULT)) {
            log.info("链接成功");
        }else {
            log.info("链接失败 !");
        }
    }
}

点击IndexApi左上角的绿色箭头启动测试用例, 如果报错,尝试添加以下 注解

@RunWith(SpringRunner.class)
@SpringBootTest(classes = { EsStudyApplication.class })
public class IndexApi {....}

返回:

链接成功

说明客户端es服务端是通的

创建索引 & create

通过前面的学习,有了一定的基础之后,回到代码中其实就是调调方法,因为你知道了这个代码的逻辑做了什么操作。下面来看下如何创建索引:

/**
     * 创建索引
     */
    @Test
    public void createIndex() throws IOException {
        CreateIndexRequest request = new CreateIndexRequest(index);
        CreateIndexResponse createIndexResponse = client.indices().create(request, RequestOptions.DEFAULT);
        log.info("创建索引 ===> "+ JSONObject.toJSONString(createIndexResponse)); // 创建索引 ===> {"acknowledged":true,"fragment":false,"shardsAcknowledged":true}
    }

大家可以返回到kibana中查看索引是否被创建,从而验证代码执行是否成功

添加别名:

// alias
request.alias(new Alias("study_alias"));

索引设置settings:

// index settings
request.settings(
        Settings.builder()
                .put("index.number_of_shards", 3)
                .put("index.number_of_replicas", 2)
);

索引映射mapping:

 // index mappings
//        {
//            "mapping": {
//            "_doc": {
//                "properties": {
//                    "name": {
//                        "type": "text"
//                    }
//                }
//            }
//        }
//        }
XContentBuilder builder = XContentFactory.jsonBuilder();
builder.startObject();
{
    builder.startObject("properties");
    {
        builder.startObject("name");
        {
            builder.field("type", "text");
        }
        builder.endObject();
    }
    builder.endObject();
}
builder.endObject();
request.mapping(builder);

设置请求超时时间:

// 请求设置
request.setTimeout(TimeValue.timeValueMinutes(1));

索引是否存在 & exist

 /**
    * 判断索引是否存在
    * @throws IOException
    */
@Test
public void existIndex() throws IOException {
    GetIndexRequest request = new GetIndexRequest(index);
    boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);
    log.info("索引{}存在 ===> {}", index, exists);
}

删除索引

 /**
    * 删除索引
    * @throws IOException
    */
@Test
public void delIndex() throws IOException {
    DeleteIndexRequest request = new DeleteIndexRequest(index);
    AcknowledgedResponse delete = client.indices().delete(request, RequestOptions.DEFAULT);
    log.info("删除索引 ===> {}", JSONObject.toJSONString(delete)); // 删除索引 ===> {"acknowledged":true,"fragment":false}
}

结束语

下节带大家看下文档操作相关的api,也是我们业务中使用最多的api~

更多关于ElasticSearch整合SpringBoot的资料请关注我们其它相关文章!

(0)

相关推荐

  • SpringBoot整合Spring Security过滤器链加载执行流程源码分析(最新推荐)

    目录 1.引言 2.Spring Security过滤器链加载 2.1.注册名为 springSecurityFilterChain的过滤器 3.查看 DelegatingFilterProxy类 4.查看 FilterChainProxy类 4.1 查看 doFilterInternal方法 4.2 查看 getFilters方法 5 查看 SecurityFilterChain接口 6. 查看 SpringBootWebSecurityConfiguration类 总结: 1.引言 在 Sp

  • SpringBoot整合Mybatis与MybatisPlus方法详细讲解

    目录 一.整合MyBatis操作 1.配置模式 2.注解模式 3.混合模式 二.整合 MyBatis-Plus 完成CRUD 1.什么是MyBatis-Plus 2.整合MyBatis-Plus 3.CRUD功能 一.整合MyBatis操作 官网:MyBatis · GitHub SpringBoot官方的Starter:spring-boot-starter-* 第三方的starter的格式: *-spring-boot-starter <dependency> <groupId>

  • SpringBoot整合Apache Pulsar教程示例

    目录 正文 准备工作 创建 SpringBoot 项目 添加 Maven 依赖 编写消息生产者 编写消息消费者 测试 总结 正文 推荐一个基于SpringBoot开发的全平台数据(数据库管理工具)功能比较完善,建议下载使用: github.com/EdurtIO/datacap 目前已经支持30多种数据源 Apache Pulsar 是一个开源的分布式 Pub-Sub 消息传递平台.它提供高可用性.持久性和性能,适用于处理大量的实时数据.SpringBoot 是一个非常流行的 Java Web

  • SpringBoot整合Graylog做日志收集实现过程

    目录 日志收集折腾过程 ELK EFK ELFK 自己撸一个 Graylog 环境搭建 创建输入 Spring Boot整合Graylog 总结 日志收集折腾过程 ELK 之前整合过ELK做日志采集,就是Elasticsearch + Logstash + Kibana: Elasticsearch:存储引擎,存放日志内容,利于全文检索 Logstash:数据传输管道,将日志内容传输到Elasticsearch,并且支持过滤内容,将内容格式化后再传输,可以满足绝大部分的应用场景 Kibana:开

  • ElasticSearch整合SpringBoot搭建配置

    目录 前言 项目搭建 配置客户端 索引API初探 & Index API ping 创建索引 & create 索引是否存在 & exist 删除索引 结束语 前言 目前正在出一个Es专题系列教程, 篇幅会较多, 请持续关注我们 本节来给大家讲一下在Springboot中如何整合es~ 本文偏实战一些,为了方便演示,本节示例沿用上节索引,好了, 废话不多说直接开整吧~ 项目搭建 老规矩,先建maven项目,下面是我的pom.xml <?xml version="1.

  • shiro整合springboot前后端分离

    本文实例为大家分享了shiro整合springboot前后端分离的具体代码,供大家参考,具体内容如下 1.shiro整合springboot的配置 package com.hisi.config; import java.util.LinkedHashMap; import java.util.Map; import javax.servlet.Filter; import org.apache.shiro.session.mgt.eis.MemorySessionDAO; import org

  • es(elasticsearch)整合SpringCloud(SpringBoot)搭建教程详解

    注意:适用于springboot或者springcloud框架 1.首先下载相关文件 2.然后需要去启动相关的启动文件 3.导入相关jar包(如果有相关的依赖包不需要导入)以及配置配置文件,并且写一个dao接口继承一个类,在启动类上标注地址 <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> &l

  • 详解mall整合SpringBoot+MyBatis搭建基本骨架

    SpringBoot实战电商项目mall(20k+star)地址:https://github.com/macrozheng/mall 摘要 本文主要讲解mall整合SpringBoot+MyBatis搭建基本骨架,以商品品牌为例实现基本的CRUD操作及通过PageHelper实现分页查询. mysql数据库环境搭建 下载并安装mysql5.7版本,下载地址:https://dev.mysql.com/downloads/installer/ 设置数据库帐号密码:root root 下载并安装客

  • docker搭建redis哨兵集群并且整合springboot的实现

    目录 1.创建两个文件夹redis和sentinel文件夹用于存放docker-compose.yml文件 2.redis下的docker-compose.yml 3.sentinel下的docker-compose.yml文件以及sentinel.conf配置文件 4.spring boot整合redis哨兵 5.哨兵工作方式 6.Redis-Cluster集群 7.redis常见问题 1.创建两个文件夹redis和sentinel文件夹用于存放docker-compose.yml文件 2.r

  • springboot项目整合mybatis并配置mybatis中间件的实现

    记录创建springboot项目并配置mybatis中间件: 资源准备及版本说明 编程工具:IDEA JDK版本:1.8 Maven版本:Apache Maven 3.6.3 springboot版本:2.4.4 mybatis版本:1.3.2 mysql版本:5.1.48 创建mavem项目 通过IDEA创建很便捷,参考<IDEA创建SpirngBoot项目>. 配置pom.xml 使用mybatis需要添加依赖 <dependency> <groupId>org.m

  • 详解SpringBoot自定义配置与整合Druid

    目录 SpringBoot配置文件 优先级 yaml的多文档配置 扩展SpringMVC 添加自定义视图解析器 自定义DruidDataSources About Druid 添加依赖 配置数据源 其他配置 Druid配置类 测试类 数据源监控 监控过滤器filter配置 SpringBoot配置文件 优先级 前面SpringBoot基础有提到,关于SpringBoot配置文件可以是properties或者是yaml格式的文件,但是在SpringBoot加载application配置文件时是存在

  • Java之SpringBoot自定义配置与整合Druid

    目录 1.SpringBoot配置文件 1.1 优先级 1.2 yaml的多文档配置 2.扩展SpringMVC 2.1 添加自定义视图解析器 3.自定义DruidDataSources 3.1 About Druid 3.2 添加依赖 3.3 配置数据源 3.4 其他配置 3.5 Druid配置类 3.6 数据源监控 3.7 监控过滤器filter配置 1.SpringBoot配置文件 1.1 优先级 关于SpringBoot配置文件可以是properties或者是yaml格式的文件,但是在S

  • springboot整合多数据源配置方式

    目录 简介 一.表结构 二.多数据源整合 1. springboot+mybatis使用分包方式整合 1.1 主要依赖包 1.2 application.yml 配置文件 1.3 建立连接数据源的配置文件 1.4 具体实现 2. springboot+druid+mybatisplus使用注解整合 2.1 主要依赖包 2.2 application.yml 配置文件 2.3 给使用非默认数据源添加注解@DS 简介 主要介绍两种整合方式,分别是 springboot+mybatis 使用分包方式整

  • 全面解析SpringBoot自动配置的实现原理

    之前一直在用SpringBoot框架,一直感觉SpringBoot框架自动配置的功能很强大,但是并没有明白它是怎么实现自动配置的,现在有空研究了一下,大概明白了SpringBoot框架是怎么实现自动配置的功能,我们编写一个最简单的自动配置功能,大概的总结一下. 一,配置属性类 其实就是值对象注入的方式去配置一些Spring常用的配置,我们编写一个最简单的配置对象. @ConfigurationProperties(prefix = "hello") //@Component //如果这

随机推荐