[Java實戰]Spring Boot整合Elasticsearch(二十六)

[Java實戰]Spring Boot整合Elasticsearch(二十六)

摘要:本文通過完整的實戰演示,詳細講解如何在Spring Boot項目中整合Elasticsearch,實現數據的存儲、檢索和復雜查詢功能。包含版本適配方案、Spring Data Elasticsearch高級特性以及性能優化建議。

一、Elasticsearch核心概念與優勢

1.1 為什么要選擇Elasticsearch?

  • 近實時搜索:數據變更后1秒內即可被檢索
  • 分布式架構:天然支持水平擴展,輕松應對海量數據
  • 全文檢索能力:基于倒排索引,支持模糊查詢、同義詞、分詞等
  • 多數據類型:支持結構化、非結構化和地理空間數據

1.2 核心概念解析

概念類比關系型數據庫說明
IndexDatabase數據容器,包含多個文檔類型
TypeTable7.x版本后已廢棄
DocumentRow數據的基本單元
FieldColumn文檔的字段
Shard分區索引的橫向拆分單元

二、環境準備與版本適配

2.1 組件版本選擇

  • Spring Boot 2.7.x
  • Elasticsearch 7.10.x
  • Spring Data Elasticsearch 4.4.x
<!-- pom.xml 依賴 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>

2.2 配置Elasticsearch連接

# application.yml
spring:elasticsearch:uris: http://localhost:9200username: elasticpassword: your_password

三、實現數據存儲與檢索

3.1 定義領域模型

@Document(indexName = "articles")
public class Article {@Idprivate String id;@Field(type = FieldType.Text)private String title;@Field(type = FieldType.Keyword)private String category;@Field(type = FieldType.Date, format = DateFormat.date_hour_minute_second)private LocalDateTime createTime;
}

3.2 創建Repository接口

public interface ArticleRepository extends ElasticsearchRepository<Article, String> {// 自定義查詢方法List<Article> findByTitleContaining(String keyword);@Query("{\"match\": {\"title\": {\"query\": \"?0\"}}}")Page<Article> searchByTitle(String keyword, Pageable pageable);
}

3.3 基礎CRUD操作示例

@Service
@RequiredArgsConstructor
public class ArticleService {@Autowiredprivate   ArticleRepository repository;public void  save(Article article) {repository.save(article);}public Page<Article> search(String keyword, int page, int size) {return (Page<Article>) repository.searchByTitle(keyword,PageRequest.of(page, size, Sort.by("createTime").descending()));}

3.4 controller編寫

@RestController
@RequestMapping("/art")
public class ArticleController {@Autowiredprivate  ArticleService articleService;//保存數據@PostMapping("/saveArt")public void saveArtInfo(@RequestBody Article art){Article article = new Article();article.setTitle("Spring Boot整合Elasticsearch實戰");article.setCategory("技術文章");article.setCreateTime(LocalDateTime.now());System.out.println("=======保存數據======");articleService.save(article);// 查詢所有文檔//articleService.findAllArticles();}
}

3.5 接口測試

#post請求
http://localhost:8080/art/saveArt

在這里插入圖片描述

ES中查看數據:

curl -X GET "localhost:9200/articles/_search?pretty"

在這里插入圖片描述

四、高級查詢實戰

4.1 組合查詢(Bool Query)

NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder();BoolQueryBuilder boolQuery = QueryBuilders.boolQuery().must(QueryBuilders.matchQuery("title", "Spring")).filter(QueryBuilders.rangeQuery("createTime").gte("now-7d/d"));queryBuilder.withQuery(boolQuery);
SearchHits<Article> hits = elasticsearchOperations.search(queryBuilder.build(), Article.class);

4.2 聚合分析示例

TermsAggregationBuilder categoryAgg = AggregationBuilders.terms("category_count").field("category.keyword").size(10);NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().addAggregation(categoryAgg).build();SearchHits<Article> searchHits = elasticsearchOperations.search(searchQuery, Article.class);
Terms terms = searchHits.getAggregations().get("category_count");

五、性能優化建議

  1. 索引策略優化

    • 合理設置分片數(建議每個分片大小在10-50GB)
    • 使用別名實現零停機索引切換
  2. 查詢優化技巧

    • 避免深度分頁(推薦使用search_after)
    • 使用filter上下文緩存高頻過濾條件
  3. 硬件配置推薦

    • SSD硬盤優先
    • JVM堆內存不超過32GB
    • 預留50%內存給文件系統緩存

六、常見問題排查

Q1:出現NoNodeAvailableException異常

  • 檢查ES集群狀態:GET _cluster/health
  • 驗證網絡連接和防火墻設置

Q2:查詢結果不符合預期

  • 使用Analyze API驗證分詞效果:
    POST _analyze
    {"analyzer": "ik_max_word","text": "分布式搜索引擎"
    }
    

參考文獻

  1. Elasticsearch官方文檔
  2. Spring Data Elasticsearch官方指南

如果你在使用過程中遇到任何問題,歡迎在評論區留言交流。感謝你的閱讀,希望這篇文章對你有所幫助!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/82019.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/82019.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/82019.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【關聯git本地倉庫,上傳項目到github】

目錄 1.下載git2.綁定用戶3.git本地與遠程倉庫交互4.github項目創建5.上傳本地項目到github6.完結撒花???&#xff01;&#xff01;&#xff01; 1.下載git git下載地址&#xff1a;https://git-scm.com/downloads 下載安裝后創建快捷地址&#xff1a;&#xff08;此處比較…

[Vue]路由基礎使用和路徑傳參

實際項目中不可能就一個頁面&#xff0c;會有很多個頁面。在Vue里面&#xff0c;頁面與頁面之間的跳轉和傳參會使用我們的路由: vue-router 基礎使用 要使用我們需要先給我們的項目添加依賴:vue-router。使用命令下載: npm install vue-router 使用路由會涉及到下面幾個對象:…

軟考-軟件工程開發模型

軟考-軟件工程開發模型 參考視頻&#xff1a; 軟件工程概述&開發模型 &#xff0c;配合視頻理解更清晰&#xff5e; 軟件的生命周期為&#xff1a;需求分析、軟件設計、軟件開發、運行維護直至被淘汰 幾個階段。 軟件工程支持 4 個活動&#xff0c;簡稱 PDCA&#xff0c…

【寫在創作紀念日】基于SpringBoot和PostGIS的各省東西南北四至極點區縣可視化

目錄 前言 一、空間檢索簡介 1、空間表結構 2、四至空間檢索 二、前后端實現 1、后端實現 2、前端集成 三、成果展示 1、東部省份 2、西部省份 3、南部省份 4、北部省份 5、中部省份 四、總結 前言 在當今數字化時代&#xff0c;地理信息數據的分析與可視化對于眾…

智能守護校園“舌尖安全“:AI視頻分析賦能名廚亮灶新時代

引言&#xff1a; 在校園食品安全備受關注的今天&#xff0c;一套融合視頻監控管理平臺與AI視頻分析盒子的智能解決方案正在全國多地學校食堂悄然落地&#xff0c;為傳統的"名廚亮灶"工程注入科技新動能。這套系統不僅實現了后廚操作的"透明化"&#xff0…

【軟件設計師】計算機網絡考點整理

以下是軟件設計師考試中 ??計算機網絡?? 的核心考點總結&#xff0c;幫助您高效備考&#xff1a; ??一、網絡體系結構與協議?? ??OSI七層模型 & TCP/IP四層模型?? 各層功能&#xff08;物理層-數據鏈路層-網絡層-傳輸層-會話層-表示層-應用層&#xff09;對應協…

Starrocks的CBO基石--統計信息的來源 StatisticAutoCollector

背景 本文來從底層代碼的實現來分析一下Starrocks怎么獲取統計信息&#xff0c;這些統計信息在后續基于CBO的代價計算的時候有著重要的作用 本文基于Starrrocks 3.3.5 結論 Starrocks的統計信息的收集是通過周期性的運行一系列的SQL&#xff08;以分區為維度&#xff0c;如果…

深度學習模型部署(四)——RKNN

一、RKNN部署及工具包安裝 參考1&#xff1a;https://blog.csdn.net/qq_40280673/article/details/136211086#/ 參考2&#xff1a;瑞芯微官方教程 RKNN部署針對瑞芯微芯片優化&#xff0c;支持NPU硬件加速&#xff0c;需要安裝rknn-toolkit&#xff0c;用于將pytorch模型轉換為…

重構研發效能:項目管理引領軟件工廠邁向智能化

1.項目管理智能化&#xff0c;激活軟件工廠新引擎 在高速發展的軟件開發時代&#xff0c;企業如何高效管理多個項目、協調團隊合作、優化資源配置&#xff0c;已成為推動技術進步的關鍵。尤其是在多任務、多項目并行的復雜環境下&#xff0c;智能項目組合管理工具正成為軟件工…

小米汽車二期工廠下月將竣工,產能提升助力市場拓展

在新能源汽車市場競爭日益激烈的當下&#xff0c;小米汽車傳來重要進展消息。據多方信息顯示&#xff0c;小米汽車二期工廠下月即將竣工&#xff0c;這一關鍵節點的到來&#xff0c;有望為小米汽車的產能提升與市場布局帶來重大突破。? 小米汽車二期工廠位于北京亦莊&#xff…

Python 爬蟲實戰:電競比賽直播數據實時抓取與可視化分析

一、引言 在電競行業快速發展的今天,電競比賽直播數據成為了電競愛好者、分析師和商業機構關注的焦點。實時抓取電競比賽直播數據并進行分析,不僅可以幫助觀眾更好地理解比賽,還能為戰隊戰術優化、選手表現評估以及賽事運營提供重要參考。 本文將詳細介紹如何使用Python爬…

零基礎設計模式——創建型模式 - 生成器模式

第二部分&#xff1a;創建型模式 - 生成器模式 (Builder Pattern) 前面我們學習了單例、工廠方法和抽象工廠模式&#xff0c;它們都關注如何創建對象。生成器模式&#xff08;也常被稱為建造者模式&#xff09;是另一種創建型模式&#xff0c;它專注于將一個復雜對象的構建過程…

Debezium快照事件監聽器系統設計

Debezium快照事件監聽器系統設計 1. 系統概述 1.1 設計目標 為 Debezium 的快照過程提供可擴展的事件監聽機制允許外部系統在快照過程中執行自定義邏輯提供線程安全的事件分發機制確保監聽器的異常不會影響主快照流程1.2 核心功能 表快照開始事件監聽表快照完成事件監聽行數據…

手術機器人行業新趨勢:Kinova多機械臂協同系統如何突破復雜場景適應性瓶頸?

機器人手術歷經多階段技術演進&#xff0c;已成為現代醫療重要方向。其需求增長源于醫療機構對高精度低風險手術方案的需求、微創手術普及及技術進步帶來的復雜場景適應性提升。Kinova 輕型機械臂憑借模塊化設計與即插即用功能&#xff0c;可快速適配不同手術環境&#xff0c;為…

力扣面試150題-- 二叉樹展開為鏈表

Day 46 題目描述 思路 初次做法&#xff1a;由于我直接考慮O&#xff08;1&#xff09;級別的空間復雜度&#xff0c;于是采取了以下做法&#xff1a; 接下來的內容就是遞歸函數如果該節點為空&#xff0c;就返回null將此時的current作為頭節點&#xff0c;left和right作為孩…

【Python】開發工具uv

文章目錄 1. uv install1.1 下載安裝腳本來安裝1.2 使用pipx安裝uv1.3 補充 2. 考慮在離線系統上安裝uv2.1 下載并上傳安裝包2.2 用戶級安裝uv&#xff08;~/.local/bin/&#xff09;2.3 補充 3. uv 管理Python解釋器4. uv 管理依賴5. uv運行代碼5.1 uv不在項目下執行腳本5.2 u…

zabbix批量主機維護腳本兼容性更新

最近做新老版本zabbix監控主機遷移發現zabbix6.0后api安全有了效大升級&#xff0c;批量主機維護腳本出現認證兼容性問題&#xff0c;以下為腳本更新token支持&#xff1a;在這里插入代碼片&#xff1a; # /usr/bin/env python3 # -*- coding:utf-8 -*- import requests impor…

Java中static關鍵字深度解析:從入門到高階實戰

Java中static關鍵字深度解析&#xff1a;從入門到高階實戰 目錄 static的本質與核心特性靜態變量 vs 實例變量&#xff1a;底層對比靜態方法的設計哲學與應用場景高級用法&#xff1a;突破常規的static技巧 4.1 靜態代碼塊&#xff1a;類加載的“初始化引擎”4.2 靜態內部類&…

基于RT-Thread的STM32F4開發第五講——軟件模擬I2C

文章目錄 前言一、RT-Thread工程創建二、AT24C02三、函數編寫1.I2C_soft.c2.I2C_soft.h3.main.h 四、效果展示五、資源分享總結 前言 本章是基于RT-Thread studio實現軟件模擬I2C&#xff0c;開發板是正點原子的STM32F4探索者&#xff0c;使用的RT-Thread驅動是5.1.0&#xff0…

49、c# 能?foreach 遍歷訪問的對象需滿足什么條件?

在 C# 中&#xff0c;要使用 foreach 循環遍歷一個對象&#xff0c;該對象必須滿足以下條件之一&#xff1a; 1. 實現 IEnumerable 或 IEnumerable 接口 非泛型版本&#xff1a;System.Collections.IEnumerable public class MyCollection : IEnumerable {private int[] _da…