SpringBoot集成ES详解

一、SpringBoot集成ES部署

在集成ES前,先要安装和配置ES环境。对于MacOS和Linux系统用户,可以使用Homebrew来安装ES,使用以下命令即可:

    brew update
    brew install elasticsearch

对于Windows用户,可以从官网下载zip包,解压后运行bin/elasticsearch.bat即可。

二、SpringBoot集成ES版本要求

在集成中,需要根据自己的SpringBoot版本和ES版本来选择合适的ES Client API。大致对应关系如下:

    ES6  -> 版本  版本 >= 2.1.0.RELEASE,  版本 >= 2.4.0.RELEASE

同时,需要在pom.xml中引入对应的dependencies:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
    </dependency>

三、SpringBoot集成ES日志

在开发过程中,通常需要对ES操作的日志进行记录和查看。可以在log4j.properties或logback.xml中进行配置:

    #log4j.properties
    log4j.logger.org.elasticsearch=INFO,es
    log4j.additivity.org.elasticsearch=false
    log4j.appender.es=org.apache.log4j.FileAppender
    log4j.appender.es.file=elasticsearch.log
    log4j.appender.es.threshold=debug
    log4j.appender.es.layout=org.apache.log4j.PatternLayout
    log4j.appender.es.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%t] %-5p %c - %m%n

四、SpringBoot集成ES集群

ES可以通过搭建集群来实现高可用和负载均衡。在集成中,通过在application.yml中进行配置实现集群:

    spring:
      data:
        elasticsearch:
          cluster-nodes: 
            - cluster-node1:9300
            - cluster-node2:9301
            - cluster-node3:9302

五、SpringBoot集成ES6

如果使用ES6版本,则需要引入高版本的API依赖:

    <dependency>
        <groupId>org.elasticsearch.client</groupId>
        <artifactId>elasticsearch-rest-high-level-client</artifactId>
        <version>6.x.x</version>
    </dependency>

同时,ES6版本默认设置了”strict”模式,需要在Connfiguration中进行配置:

    @Configuration
    public class RestClientConfig extends AbstractElasticsearchConfiguration {
     
        @Override
        public RestHighLevelClient elasticsearchClient() {
     
            final ClientConfiguration clientConfiguration = ClientConfiguration.builder()
                .connectedTo("localhost:9200", "localhost:9291")
                .build();
     
            return RestClients.create(clientConfiguration).rest();
        }
     
        @Override
        public ElasticsearchRestTemplate elasticsearchRestTemplate() {
            return new ElasticsearchRestTemplate(elasticsearchClient());
        }
     
        @Override
        public ElasticsearchOperations elasticsearchOperations() {
            return new ElasticsearchRestTemplate(elasticsearchClient());
        }
     
        @Override
        public EntityMapper entityMapper() {
          
        }
    }

六、SpringBoot集成ES7

在ES7中,Client API将要被废弃,取而代之的是高速的Java HTTP客户端,可以通过以下方式进行引用:

    <dependency>
        <groupId>org.elasticsearch.client</groupId>
        <artifactId>elasticsearch-java-client</artifactId>
        <version>7.x.x</version>
    </dependency>

通过配置高速的Java HTTP客户端,可以实现更好的查询性能。

七、SpringBoot集成ES8

在ES8中,将继续提高查询性能和去除Client API,因此需要升级到更高的API依赖版本:

    <dependency>
        <groupId>org.elasticsearch.client>
        <artifactId>elasticsearch-rest-client-sniffer</artifactId>
        <version>7.8.0</version>
    </dependency>

同时,由于ES7中已经废除了TransportClient,因此代码需要进行迁移,大致思路如下:

    private RestHighLevelClient restHighLevelClient;
    private RestClient restClient;
    private static final RequestOptions COMMON_OPTIONS;
     
    static {
        RequestOptions.Builder builder = RequestOptions.DEFAULT.toBuilder();
        COMMON_OPTIONS = builder.build();
    }
     
    public ElasticsearchClient() {
        restHighLevelClient = new RestHighLevelClient(
                RestClient.builder(
                        new HttpHost("192.168.1.2", 9200, "http"),
                        new HttpHost("192.168.1.3", 9200, "http")));
        restClient = restHighLevelClient.getLowLevelClient();
    }

八、SpringBoot集成ES生成索引map

可以通过Spring Data专门提供的ElasticsearchEntityTypeMappper实现即时的索引更新和映射生成:

    @Configuration
    public class ElasticsearchClientConfig extends AbstractElasticsearchConfiguration {
     
        @Override
        public RestHighLevelClient elasticsearchClient() {
            final ClientConfiguration configuration = ClientConfiguration.builder()   
                    .connectedTo("localhost:9200")
                    .build();
            return RestClients.create(configuration).rest();
        }
     
        @Bean
        public ElasticsearchOperations elasticsearchOperations() {
            ElasticsearchRestTemplate elasticsearchTemplate = new ElasticsearchRestTemplate(elasticsearchClient());
            Map<String, Object> indexSettings = new HashMap<>();
            indexSettings.put("index.number_of_shards", 1);
            indexSettings.put("index.number_of_replicas", 0);
            elasticsearchTemplate.deleteIndex("book");
            elasticsearchTemplate.createIndex(Book.class, indexSettings);
            elasticsearchTemplate.putMapping(Book.class);
            elasticsearchTemplate.refresh(Book.class);
            return elasticsearchTemplate;
        }
    }

九、SpringBoot集成ES用户名密码

当需要进行安全控制和授权时,可以通过在application.yml中进行配置并进行权限控制:

    spring:
      data:
        elasticsearch:
          repositories:
            enabled: true
          properties:
            http:
              auth:
                password: elasticsearch_password
                username: elasticsearch_username

同时,需要在ElasticsearchTemplate中进行身份验证:

    public ElasticsearchTemplate esTemplate(RestHighLevelClient elasticsearchClient) {
        final ClientConfiguration configuration = 
                ClientConfiguration.builder()
                        .connectedTo("localhost:9200")
                        .build();
        return new ElasticsearchRestTemplate(
                elasticsearchClient, new DefaultEntityMapper(),
                new CustomElasticsearchExceptionTranslator(),
                new SearchTemplateEngine());
    }
     
    @Bean
    public RestHighLevelClient elasticsearchClient() {
        return RestClients.create(
                ClientConfiguration.builder()
                        .connectedTo("localhost:9200")
                        .usingSsl()
                        .withBasicAuth("elastic", "password")
                        .build())
                .rest();
    }

总结

本篇文章详细介绍了如何使用SpringBoot集成ES,并从多个方面进行了详细阐述,包括部署、版本要求、日志、集群、ES6、ES7、ES8、生成索引map、用户名密码等。希望可以对读者了解和使用ES有所帮助。

原创文章,作者:SHTE,如若转载,请注明出处:https://www.506064.com/n/149776.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
SHTE的头像SHTE
上一篇 2024-11-05 16:53
下一篇 2024-11-05 16:53

相关推荐

  • 从ga角度解读springboot

    springboot作为目前广受欢迎的Java开发框架,其中的ga机制在整个开发过程中起着至关重要的作用。 一、ga是什么 ga即Group Artifacts的缩写,它是Mave…

    编程 2025-04-29
  • Spark集成ES开发

    本文将介绍如何使用Spark集成ES进行数据开发和分析。 一、系统概述 Spark是一个基于内存的分布式计算系统,可以快速地处理大量数据。而ES(ElasticSearch)则是一…

    编程 2025-04-28
  • SpringBoot Get方式请求传参用法介绍

    本文将从以下多个方面对SpringBoot Get方式请求传参做详细的阐述,包括URL传参、路径传参、请求头传参、请求体传参等,帮助读者更加深入地了解Get请求方式下传参的相关知识…

    编程 2025-04-27
  • SpringBoot如何设置不输出Info日志

    本篇文章将带您了解如何在SpringBoot项目中关闭Info级别日志输出。 一、为什么要关闭Info日志 在开发中,我们经常会使用Log4j、Logback等框架来输出日志信息,…

    编程 2025-04-27
  • Helm部署ES CrashLoopBackOff

    如果你在使用Helm部署ES时遇到CrashLoopBackOff问题,那么本文将对这一问题进行详细解答。我们将从以下方面进行阐述: 一、问题分析与定位 在使用Helm部署ES时,…

    编程 2025-04-27
  • Linux sync详解

    一、sync概述 sync是Linux中一个非常重要的命令,它可以将文件系统缓存中的内容,强制写入磁盘中。在执行sync之前,所有的文件系统更新将不会立即写入磁盘,而是先缓存在内存…

    编程 2025-04-25
  • 神经网络代码详解

    神经网络作为一种人工智能技术,被广泛应用于语音识别、图像识别、自然语言处理等领域。而神经网络的模型编写,离不开代码。本文将从多个方面详细阐述神经网络模型编写的代码技术。 一、神经网…

    编程 2025-04-25
  • Linux修改文件名命令详解

    在Linux系统中,修改文件名是一个很常见的操作。Linux提供了多种方式来修改文件名,这篇文章将介绍Linux修改文件名的详细操作。 一、mv命令 mv命令是Linux下的常用命…

    编程 2025-04-25
  • Python输入输出详解

    一、文件读写 Python中文件的读写操作是必不可少的基本技能之一。读写文件分别使用open()函数中的’r’和’w’参数,读取文件…

    编程 2025-04-25
  • nginx与apache应用开发详解

    一、概述 nginx和apache都是常见的web服务器。nginx是一个高性能的反向代理web服务器,将负载均衡和缓存集成在了一起,可以动静分离。apache是一个可扩展的web…

    编程 2025-04-25

发表回复

登录后才能评论