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/zh-hk/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

發表回復

登錄後才能評論