最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot整合Elasticsearch?8.x的實(shí)戰(zhàn)總結(jié)(附完整示例)

 更新時(shí)間:2026年03月30日 08:33:14   作者:盡興-  
Elasticsearch(簡(jiǎn)稱 ES)是當(dāng)前最流行的分布式搜索引擎,具備強(qiáng)大的全文檢索與數(shù)據(jù)分析能力,本文基于官方文檔與實(shí)戰(zhàn)經(jīng)驗(yàn),系統(tǒng)總結(jié) ?Spring Boot 整合 Elasticsearch 8.x 的核心要點(diǎn)、版本選型和三種主流實(shí)現(xiàn)方式,感興趣的小伙伴可以了解下

Elasticsearch(簡(jiǎn)稱 ES)是當(dāng)前最流行的分布式搜索引擎,具備強(qiáng)大的全文檢索與數(shù)據(jù)分析能力。而 Spring Data Elasticsearch 基于 Spring Data API 對(duì) ES 客戶端進(jìn)行了封裝,極大簡(jiǎn)化了 Spring Boot 項(xiàng)目與 ES 的整合開發(fā)流程。

本文基于官方文檔與實(shí)戰(zhàn)經(jīng)驗(yàn),系統(tǒng)總結(jié) ?Spring Boot 整合 Elasticsearch 8.x 的核心要點(diǎn)、版本選型、三種主流實(shí)現(xiàn)方式(ElasticsearchRepositoryElasticsearchTemplate、ElasticsearchClient)及完整代碼示例?,并附知識(shí)體系梳理,助力開發(fā)者快速上手、高效落地。

一、Spring Data Elasticsearch 核心概述

1.1 核心定位與價(jià)值

  • Spring Data Elasticsearch 是 Spring Data 項(xiàng)目的子模塊,?對(duì) Elasticsearch 官方 Java 客戶端進(jìn)行封裝?,提供統(tǒng)一、簡(jiǎn)潔的編程模型。
  • 開發(fā)者無需直接調(diào)用復(fù)雜的 REST API,即可完成索引管理、文檔 CRUD、高級(jí)搜索等操作。
  • ?以 POJO 為中心?,通過注解將 Java 實(shí)體類與 ES 文檔自動(dòng)映射,顯著降低整合門檻。
  • 在提升開發(fā)效率的同時(shí),?保留 Elasticsearch 的核心特性與高性能優(yōu)勢(shì)?。

1.2 版本對(duì)應(yīng)關(guān)系(關(guān)鍵重點(diǎn)!務(wù)必嚴(yán)格遵守)

版本不匹配是整合失敗的最常見原因。官方明確的兼容關(guān)系如下:

ElasticsearchSpring Data ElasticsearchSpring Framework推薦 Spring Boot
8.14.x5.3.x6.1.x3.3.x(如 3.3.2)

若使用 Spring Boot 3.3.2,Maven/Gradle 會(huì)自動(dòng)引入 spring-data-elasticsearch:5.3.2,?無需手動(dòng)指定版本?。

切勿混用 7.x 與 8.x 客戶端,API 差異巨大,極易導(dǎo)致運(yùn)行時(shí)錯(cuò)誤。

1.3 核心依賴與官方資源

核心依賴(Maven 示例)

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
    <!-- Spring Boot 3.3.2 自動(dòng)引入 compatible 版本 -->
</dependency>

無需額外引入 elasticsearch-java 客戶端?,starter 已包含。

二、Spring Boot 配置 Elasticsearch 的兩種方式

2.1 方式一:application.yml配置(推薦)

配置簡(jiǎn)單、維護(hù)方便,適用于大多數(shù)場(chǎng)景。

spring:
  elasticsearch:
    uris: <http://localhost:9200>
    connection-timeout: 1s
    socket-timeout: 30s

支持多個(gè) URI(集群部署):uris: ["<http://es1:9200>", "<http://es2:9200>"]

2.2 方式二:@Configuration自定義配置類(靈活可控)

適用于需要 認(rèn)證、SSL、自定義 HTTP 客戶端 等高級(jí)場(chǎng)景。

@Configuration
public class ElasticsearchConfig extends ElasticsearchConfiguration {

    @Override
    public ClientConfiguration clientConfiguration() {
        return ClientConfiguration.builder()
            .connectedTo("localhost:9200")
            // .withBasicAuth("user", "password")       // 基礎(chǔ)認(rèn)證
            // .useSsl()                                // 啟用 HTTPS
            .build();
    }
}

繼承 ElasticsearchConfiguration 可復(fù)用 Spring Data 的自動(dòng)裝配邏輯。

三、三種核心實(shí)現(xiàn)方式(實(shí)戰(zhàn)詳解)

3.1 方式一:ElasticsearchRepository(聲明式開發(fā),最簡(jiǎn))

適合:基礎(chǔ) CRUD、簡(jiǎn)單條件查詢

步驟 1:創(chuàng)建實(shí)體類(與 ES 索引映射)

@Document(indexName = "employee")
public class Employee {
    @Id
    private String id;

    @Field(type = FieldType.Text, analyzer = "ik_max_word")
    private String name;

    @Field(type = FieldType.Keyword)
    private String department;

    @Field(type = FieldType.Double)
    private Double salary;

    // getters & setters
}

關(guān)鍵注解說明?:

  • @Document:指定索引名,?索引不存在時(shí)可自動(dòng)創(chuàng)建?(需開啟自動(dòng)創(chuàng)建)。
  • @Id:對(duì)應(yīng) ES 文檔 _id。
  • @Field:控制字段類型、分詞器(如 ik_max_word / ik_smart)。

步驟 2:定義 Repository 接口

public interface EmployeeRepository extends ElasticsearchRepository<Employee, String> {
    List<Employee> findByDepartment(String department);
    List<Employee> findByNameContaining(String name);
}

無需實(shí)現(xiàn)類?!Spring Data 自動(dòng)生成實(shí)現(xiàn),支持 ?方法名派生查詢?(見下表)。

方法名示例生成的 ES 查詢
findByDepartmentAndSalaryGreaterThanbool.must(department=?, range(salary > ?))
findByNameLikewildcard(name: *?*)
findBySalaryBetweenrange(salary: [?, ?])

步驟 3:測(cè)試使用

@Autowired
private EmployeeRepository employeeRepo;

// 保存
Employee emp = new Employee("1", "張三", "研發(fā)部", 15000.0);
employeeRepo.save(emp);

// 查詢
List<Employee> list = employeeRepo.findByDepartment("研發(fā)部");

3.2 方式二:ElasticsearchTemplate(模板式開發(fā),靈活)

適合:批量操作、復(fù)雜查詢、高亮、聚合等中等復(fù)雜場(chǎng)景

注意:?新版 ElasticsearchTemplate 已基于官方 ElasticsearchClient 實(shí)現(xiàn)?,不再依賴廢棄的 RestHighLevelClient。

核心操作示例

@Autowired
private ElasticsearchTemplate elasticsearchTemplate;

// 創(chuàng)建索引(帶 mapping)
elasticsearchTemplate.createIndex(Employee.class);

// 批量插入
List<IndexQuery> queries = employees.stream()
    .map(emp -> new IndexQueryBuilder().withId(emp.getId()).withObject(emp).build())
    .collect(Collectors.toList());
elasticsearchTemplate.bulkIndex(queries);

// 復(fù)雜查詢(Match + 高亮)
Query query = NativeQuery.builder()
    .withQuery(q -> q.match(m -> m.field("name").query("工程師")))
    .withHighlight(h -> h.fields(Map.of("name", HighlightField.of(hf -> hf)))))
    .build();

SearchHits<Employee> hits = elasticsearchTemplate.search(query, Employee.class);

支持原生 DSL 構(gòu)建,靈活性遠(yuǎn)超 Repository。

3.3 方式三:ElasticsearchClient(官方推薦原生客戶端)

適合:高級(jí)聚合、極致性能優(yōu)化、完全控制請(qǐng)求細(xì)節(jié)

Spring Boot 3.3+ 中可直接注入:

@Autowired
private ElasticsearchClient esClient;

核心操作示例

// 索引文檔
Product product = new Product("p1", "山地自行車", 2999.0);
esClient.index(i -> i
    .index("products")
    .id(product.getId())
    .document(product)
);

// 搜索(Match 查詢)
String keyword = "自行車";
SearchResponse<Product> response = esClient.search(s -> s
    .index("products")
    .query(q -> q.match(m -> m.field("name").query(keyword))),
    Product.class
);

// 聚合查詢(按價(jià)格區(qū)間分組)
SearchResponse<Void> aggResp = esClient.search(b -> b
    .index("products")
    .size(0) // 不返回文檔,只返回聚合結(jié)果
    .aggregations("price_ranges", a -> a
        .range(r -> r
            .field("price")
            .ranges(
                r1 -> r1.from(0).to(1000),
                r2 -> r2.from(1000).to(5000)
            )
        )
    ),
    Void.class
);

完全兼容 Elasticsearch 8.x 新 API?,語法簡(jiǎn)潔、類型安全、性能最優(yōu)。

四、核心注意事項(xiàng)與關(guān)鍵細(xì)節(jié)

4.1 版本兼容性

  • ?必須嚴(yán)格對(duì)齊?:ES 8.14 → Spring Data ES 5.3 → Spring Boot 3.3。
  • 使用 mvn dependency:treegradle dependencies 檢查依賴沖突。

4.2 分詞器配置

  • 使用 ik_max_word / ik_smart 前,?必須在 ES 服務(wù)器安裝 IK 分詞器插件?。
  • 未安裝會(huì)導(dǎo)致啟動(dòng)報(bào)錯(cuò)或分詞失效。

4.3 三種方式對(duì)比與選型建議

實(shí)現(xiàn)方式核心特點(diǎn)適用場(chǎng)景
ElasticsearchRepository聲明式、零實(shí)現(xiàn)、開發(fā)最快簡(jiǎn)單 CRUD、基礎(chǔ)查詢
ElasticsearchTemplate模板封裝、支持復(fù)雜操作批量、高亮、條件組合查詢
ElasticsearchClient官方原生、功能最全、性能最優(yōu)高級(jí)聚合、自定義 DSL、極致控制

新項(xiàng)目建議優(yōu)先使用 ElasticsearchClient,長(zhǎng)期維護(hù)性最佳。

4.4 其他關(guān)鍵細(xì)節(jié)

  • ?批量操作?:避免循環(huán)單條插入,使用 bulk API 提升性能 10 倍 +。
  • ?聚合查詢?:設(shè)置 size: 0 避免返回?zé)o用文檔,減少網(wǎng)絡(luò)開銷。
  • ?單節(jié)點(diǎn)開發(fā)環(huán)境?:創(chuàng)建索引時(shí)設(shè)置 "number_of_replicas": 0,防止副本分配失敗。
  • ?日志調(diào)試?:開啟 logging.level.org.elasticsearch.client=DEBUG 查看實(shí)際請(qǐng)求。

五、總結(jié)

Spring Boot 整合 Elasticsearch 8.x 的核心在于 ?合理選型 + 規(guī)范配置 + 場(chǎng)景化使用?:

  • 簡(jiǎn)單場(chǎng)景ElasticsearchRepository,開發(fā)效率最高;
  • 中等復(fù)雜度ElasticsearchTemplate,平衡靈活性與便捷性;
  • 復(fù)雜/高性能場(chǎng)景 → ?**ElasticsearchClient(官方推薦)**?,掌控全局。

 ?牢記三點(diǎn)?:

  1. ?版本必須嚴(yán)格匹配?;
  2. ?IK 分詞器需提前安裝?;
  3. ?批量操作用 bulk,聚合查詢?cè)O(shè) size=0?。

到此這篇關(guān)于SpringBoot整合Elasticsearch 8.x的實(shí)戰(zhàn)總結(jié)(附完整示例)的文章就介紹到這了,更多相關(guān)SpringBoot整合Elasticsearch 8.x內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳細(xì)SpringBoot生命周期接口的使用

    詳細(xì)SpringBoot生命周期接口的使用

    本文主要介紹了SpringBoot生命周期接口的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • Java自定義協(xié)議報(bào)文封裝 添加Crc32校驗(yàn)的實(shí)例

    Java自定義協(xié)議報(bào)文封裝 添加Crc32校驗(yàn)的實(shí)例

    下面小編就為大家分享一篇Java自定義協(xié)議報(bào)文封裝 添加Crc32校驗(yàn)的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-01-01
  • Nacos簡(jiǎn)介最新收藏版

    Nacos簡(jiǎn)介最新收藏版

    Nacos?是阿里巴巴推出來的一個(gè)新開源項(xiàng)目,這是一個(gè)更易于構(gòu)建云原生應(yīng)用的動(dòng)態(tài)服務(wù)發(fā)現(xiàn)、配置管理和服務(wù)管理平臺(tái),Nacos?幫助您更敏捷和容易地構(gòu)建、交付和管理微服務(wù)平臺(tái),對(duì)Nacos相關(guān)基本知識(shí)感興趣的朋友一起看看吧
    2023-08-08
  • Spring Cloud接口突然變慢的解決方案

    Spring Cloud接口突然變慢的解決方案

    在Spring Cloud項(xiàng)目中,接口突然變慢可能是由多種原因造成的,本文給大家介紹了一些可能的原因以及相應(yīng)的解決方案,通過代碼示例給大家講解的非常詳細(xì),需要的朋友可以參考下
    2024-01-01
  • 學(xué)習(xí)Java中的List集合

    學(xué)習(xí)Java中的List集合

    這篇文章主要介紹了學(xué)習(xí)Java中的List集合,List是一個(gè)有序集合, 說是集合,其實(shí)只是只是Collection接口的一個(gè)子接口,下面關(guān)于List的相關(guān)資料 需要的小伙伴可以參考一下,希望對(duì)你有所幫助
    2022-02-02
  • 淺析在Java中如何優(yōu)雅的停止一個(gè)線程

    淺析在Java中如何優(yōu)雅的停止一個(gè)線程

    我們知道在Java中可以通過new Thread().start()創(chuàng)建一個(gè)線程,那今天我們就來思考另外一個(gè)問題:線程的終止,快跟隨小編一起學(xué)習(xí)起來吧
    2024-03-03
  • 微信小程序訂閱消息推送實(shí)戰(zhàn)圖文教程(Java?Spring?Boot?+?Redis)

    微信小程序訂閱消息推送實(shí)戰(zhàn)圖文教程(Java?Spring?Boot?+?Redis)

    訂閱消息是微信小程序提供的一種消息推送方式,用戶可以訂閱某個(gè)公眾號(hào)或小程序的消息,當(dāng)有新消息時(shí),系統(tǒng)會(huì)自動(dòng)推送通知給用戶,這篇文章主要介紹了微信小程序訂閱消息推送(Java Spring Boot+Redis)的相關(guān)資料,需要的朋友可以參考下
    2026-04-04
  • Java 如何獲取url地址文件流

    Java 如何獲取url地址文件流

    這篇文章主要介紹了Java 如何獲取url地址文件流,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • 深入介紹Spring框架及故障排除

    深入介紹Spring框架及故障排除

    這篇文章主要介紹了深入介紹Spring框架及故障排除,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下
    2022-06-06
  • 在SpringBoot框架下實(shí)現(xiàn)Excel導(dǎo)入導(dǎo)出的方法詳解

    在SpringBoot框架下實(shí)現(xiàn)Excel導(dǎo)入導(dǎo)出的方法詳解

    SpringBoot是由Pivotal團(tuán)隊(duì)提供的全新框架,其設(shè)計(jì)目的是用來簡(jiǎn)化新Spring應(yīng)用的初始搭建以及開發(fā)過程,今天我們就使用純前對(duì)按表格控件帶大家了解,如何在Spring Boot框架下實(shí)現(xiàn)Excel服務(wù)端導(dǎo)入導(dǎo)出,需要的朋友可以參考下
    2023-06-06

最新評(píng)論

宁陵县| 富蕴县| 达尔| 兴业县| 车致| 济源市| 三河市| 凌海市| 东海县| 定安县| 碌曲县| 怀仁县| 子洲县| 会东县| 布尔津县| 鲁甸县| 习水县| 泌阳县| 拉孜县| 玉溪市| 辽宁省| 财经| 尤溪县| 沅陵县| 康乐县| 珲春市| 奉贤区| 那曲县| 高州市| 宣城市| 梁山县| 灵台县| 天祝| 伊通| 罗山县| 鄂州市| 聊城市| 柏乡县| 繁峙县| 沐川县| 西丰县|