在業務開發中使用ElasticSearch的指導手冊

文章目錄

  • 該業務為什么需要ElasticSearch? / 該業務需要ElasticSearch的核心功能是哪些?
    • 正確示例
    • 錯誤示例
  • 如何快速驗證分詞是否能夠滿足業務需求?
    • 分詞不滿足,如何自定義分詞?
  • 業務數據的字段類型映射是否合理?
  • 實踐中如何使用IndexTemplate,Index Alias?
  • 業務數據是否可修改?
  • 業務數據需要保留多長時間?/ 如何配置生命周期管理?
  • 業務數據的增長情況估算?容量估算?
  • 最后

本篇博文分享自己在實踐中使用ElasticSearch進行業務開發的一些心得。只討論應用程序和ElasticSearch交互,至于其他組件,例如Kafak和ElasticSearch的集成則不在本篇博文討論范圍之內。

在業務中使用ElasticSearch中時建議將下列事項作為檢查清單,根據實際情況來增減,確保自己在開發過程中思考了下列事項并結合實際情況來完成最終的設計、開發。

該業務為什么需要ElasticSearch? / 該業務需要ElasticSearch的核心功能是哪些?

在使用ES時,我們要問自己的第一個問題是,我為什么拿ES來解決當前業務中的問題?對于該業務的技術問題,團隊內的現有技術棧和ES相比有哪些不足?一定要有充足的理由。

正確示例

  1. 業務需要一個推薦系統,可以利用ES的分詞能力來做這件事
  2. 對于海量數據的模糊查詢,已經對數據庫索引和代碼進行了優化,查詢起來還是很慢。所以將數據庫的數據同步至ES中,利用ES強大的緩存能力來幫助我們提高模糊查詢的性能。

錯誤示例

  1. 我看ES好像能干這事,而且網上很多解決方案也是這個。那我們就用。(沒有結合當前情況進行思考,直接進行照搬的)

如何快速驗證分詞是否能夠滿足業務需求?

大部分使用ES場景還是和其分詞功能有關。

一個常見的錯誤開發流程是,上來就開干,直接寫代碼,周邊代碼擼完了,結果到最后發現分詞有各種各樣的問題。所以對于這種關鍵的問題,我們一開始就要對其驗證,只有核心分詞沒問題且能滿足我們的業務需求了,再寫代碼也不遲。

可以根據業務需求找到合適的內置分詞器。找到分詞器之后,用一些示例文本在Kibana > Dev Tool中測一下分詞效果,見如何測試分詞器,例如,我想測一下標準分詞器對我們業務的一些文本的分詞結果

POST _analyze
{"analyzer": "standard","text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."
}

這種方式你能在幾個小時之內快速知道哪些分詞器能滿足當前業務場景并及時反饋給產品團隊進行溝通,在需求前期就能快速辨別該需求能不能做,而不是拍著胸脯說,沒問題,然后擼了一堆代碼,發現業務核心根本沒辦法實現,自己給自己挖了一個坑。

分詞不滿足,如何自定義分詞?

有很多場景使用內置的分詞器可能不滿足,例如:使用ES完全達到和數據庫like的效果。

自定義分詞只需要看官方文檔下面幾個內容

  1. 創建自定義分詞器
  2. 為某個字段指定分詞器

創建完自定義分詞器切記不要忘了上面一條,要先測試過確保沒問題,才可進行下一步

業務數據的字段類型映射是否合理?

確定核心分詞字段沒問題了之后,接下來就要為整個index建立完整的mapping字段。關于字段類型可直接參考官方文檔field data types部分,根據實際業務數據類型選擇合適的字段類型。同時結合官方文檔中的優化索引速度和優化搜索速度中有關index的建議,設計出合理,高效的結構。

實踐中如何使用IndexTemplate,Index Alias?

  1. 建議使用IndexTemplate并按照業務的數據特點對index進行分區。例如,我們需要把每年的訂單數據導入到ES中以便快速檢索,我們只提供近5年的數據搜索。我們會將index按照年分區,可根據查詢區間直接搜索相關的年的index而不是所有index;刪除的時候直接將該index刪除即可。
  2. 無論現在用不用Index Alias,我都建議為index設置alias。

業務數據是否可修改?

如果你的業務數據不涉及到更新,寫進去就是之后就是查詢,類日志數據,強烈建議使用datastream

業務數據需要保留多長時間?/ 如何配置生命周期管理?

index結構創建好了之后,一個關鍵的問題是該數據需要在ES中保留多長時間,因為機器資源是有限的,不可能不加任何限制的存儲數據。

這個問題需要產品團隊給出明確的答案。有了明確的期限之后,我們要根據實際情況為index設置生命周期策略。雖然這些活編程式也能干,但是ES既然提供了這個工具,干嘛不用它的呢。有關生命周期的各配置細節解釋和具體配置可參考這篇博文

業務數據的增長情況估算?容量估算?

在業務上線之前,需要預估該業務上線后ES中數據容量情況,以便確定當前ES的機器資源是否滿足需要,如果不滿足應該擴充多少?預估容量也有助于避免由于數據量突增導致ES壓力增大,影響到其他使用到ES的業務。

如何正確的計算ES所需要的機器資源呢?我一開始的想法是,計算每條document在ES中的存儲大小,然后根據產品給出的預估量,簡單計算所需總存儲大小是多少。后來發現,社區問過類似的問題,回答是這樣沒辦法做也不建議這樣做。因為ES存儲會做各種優化、壓縮。不可能通過這種方式計算出來,即使算出來也是不準確的。

唯一的可行方法是,預估上線之后數據量有多大,然后按照這個數據量灌到ES里去,觀察ES的壓力情況,根據實際情況做調整

最后

上述所有項都是在業務開發中值得注意的地方。我并沒有把每一步的解決方案都詳細的寫出來,是因為解決方案里鏈接了大量的官方文檔,跟著官方做就可以實現。

真正寫代碼往往是上述大部分問題都已經確定了之后才開始。

如有更好的開發實踐,歡迎留言討論

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

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

相關文章

MySQL設置表自增步長

在MySQL數據庫管理中,自增字段(AUTO_INCREMENT)是一種常見且重要的功能,通常用于生成唯一的標識符(如主鍵)。然而,在多種應用場景下,默認的自增步長(1)可能無…

【InternLM實戰營第二期筆記】02:大模型全鏈路開源體系與趣味demo

文章目錄 00 環境設置01 部署一個 chat 小模型02 Lagent 運行 InternLM2-chat-7B03 浦語靈筆2 第二節課程視頻與文檔: https://www.bilibili.com/video/BV1AH4y1H78d/ https://github.com/InternLM/Tutorial/blob/camp2/helloworld/hello_world.md 視頻和文檔內容基…

003 CentOS 7.9 mysql8.3.0安裝及配置

文章目錄 Windows PowerShell測試端口安裝及配置1. 下載MySQL安裝包2. 解壓安裝包3. 安裝MySQL4. 啟動MySQL服務5. 獲取并設置MySQL root密碼6. 創建數據庫7. 配置遠程連接(可選) 卸載mysql檢查并卸載已有的MySQL或MariaDB: https://download…

云計算和大數據處理

文章目錄 1.云計算基礎知識1.1 基本概念1.2 云計算分類 2.大數據處理基礎知識2.1 基礎知識2.3 大數據處理技術 1.云計算基礎知識 1.1 基本概念 云計算是一種提供資源的網絡,使用者可以隨時獲取“云”上的資源,按需求量使用,并且可以看成是無…

AWS安全性身份和合規性之WAF(Web Application Firewall)

AWS WAF(Web Application Firewall)是一項AWS托管的網絡安全服務,用于保護Web應用程序免受常見的Web攻擊,如SQL注入、跨站腳本(XSS)、跨站請求偽造(CSRF)等。 應用場景:…

STM32應用開發進階--IIC總線(SHT20溫濕度+HAL庫_硬件I2C)

實現目標 1、掌握IIC總線基礎知識; 2、會使用軟件模擬IIC總線和使用STM32硬件IIC總線; 3、 學會STM32CubeMX軟件關于IIC的配置; 4、掌握SHT20溫濕度傳感器的驅動; 5、具體目標:(1)用STM32硬件IIC驅動S…

49 序列化和反序列化

本章重點 理解應用層的作用,初識http協議 理解傳輸層的作用,深入理解tcp的各項特性和機制 對整個tcp/ip協議有系統的理解 對tcp/ip協議體系下的其他重要協議和技術有一定的了解 學會使用一些網絡問題的工具和方法 目錄 1.應用層 2.協議概念 3. 網絡計…

CSRF跨站請求偽造實戰

目錄 一、定義 二、與XSS的區別 三、攻擊要點 四、實戰 一、定義 CSRF (Cross-site request forgery,跨站請求偽造),攻擊者利用服務器對用戶的信任,從而欺騙受害者去服務器上執行受害者不知情的請求。在CSRF的攻擊場景中,攻擊…

Django模板層——模板引擎配置

作為Web 框架,Django 需要一種很便利的方法以動態地生成HTML。最常見的做法是使用模板。 模板包含所需HTML 輸出的靜態部分,以及一些特殊的語法,描述如何將動態內容插入。 模板引擎配置 模板引擎使用該TEMPLATES設置進行配置。這是一個配置列…

C++數據結構——哈希桶HashBucket

目錄 一、前言 1.1 閉散列 1.2 開散列 1.3 string 與 非 string 二、哈希桶的構成 2.1 哈希桶的節點 2.2 哈希桶類 三、 Insert 函數 3.1 無需擴容時 3.2 擴容 復用 Insert: 逐個插入: 優缺點比對: 第一種寫法優點 第一種寫法…

gfast:基于全新Go Frame 2.3+Vue3+Element Plus構建的全棧前后端分離管理系統

gfast:基于全新Go Frame 2.3Vue3Element Plus構建的全棧前后端分離管理系統 隨著信息技術的飛速發展和數字化轉型的深入,后臺管理系統在企業信息化建設中扮演著越來越重要的角色。為了滿足市場對于高效、靈活、安全后臺管理系統的需求,gfast應…

OpenUI 可視化 AI:打造令人驚艷的前端設計!

https://openui.fly.dev/ai/new 可視化UI的新時代:通過人工智能生成前端代碼 許久未更新, 前端時間在逛github,發現一個挺有的意思項目,通過口語化方式生成前端UI頁面,能夠直觀的看到效果,下面來給大家演示下 在現代…

SAP FS00如何導出會計總賬科目表

輸入T-code : S_ALR_87012333 根據‘FS00’中找到的總賬科目,進行篩選執行 點擊左上角的列表菜單,選擇‘電子表格’導出即可

echarts-地圖

使用地圖的三種的方式: 注冊地圖(用json或svg,注冊為地圖),然后使用map地圖使用geo坐標系,地圖注冊后不是直接使用,而是注冊為坐標系。直接使用百度地圖、高德地圖,使用百度地圖或高德地圖作為坐標系。 用json或svg注…

C++中string類的初步介紹

C語言中的字符串 在C語言中,字符串是以\0結尾的一些字符的集合,C標準庫中提供了一系列str系列的庫函數,但這些庫函數與字符串是分離的,不符合面向對象的編程思想。 string類的大致介紹 1.string是表示字符串的字符串類 2.stri…

GpuMall智算云:meta-llama/llama3/Llama3-8B-Instruct-WebUI

LLaMA 模型的第三代,是 LLaMA 2 的一個更大和更強的版本。LLaMA 3 擁有 35 億個參數,訓練在更大的文本數據集上GpuMall智算云 | 省錢、好用、彈性。租GPU就上GpuMall,面向AI開發者的GPU云平臺 Llama 3 的推出標志著 Meta 基于 Llama 2 架構推出了四個新…

pycharm畫圖貓和老鼠

在PyCharm中,你可以使用turtle模塊來畫圖。以下是一個簡單的例子,展示如何使用turtle模塊來繪制一個貓和一個老鼠。 import turtle # 設置窗口標題 turtle.title("畫圖貓和老鼠") # 創建兩個turtle對象,一個用于繪制貓&#xf…

AWS聯網和內容分發之API Gateway

Amazon API Gateway是一種完全托管的服務,可以幫助開發人員輕松創建、發布、維護、監控和保護任意規模的API。API充當應用程序的前門,可從您的后端服務訪問數據、業務邏輯或功能。使用API Gateway,您可以創建RESTful API和WebSocket API&…

lightGBM 集成學習模型 - 以銀行風控業務為例

LightGBM(Light Gradient Boosting Machine)是基于梯度提升決策樹(GBDT)的一種改進實現。其核心思想是通過加法模型(additive model)和前向分布算法(forward distribution algorithm&#xff09…

Qt pro工程文件編寫匯總(區分debug和release、32位和64位的方法,編譯輸出目錄等)

前言: 從事qt開發已經好幾年了,但有關pro編寫的一些細節問題一直沒有一個很好的梳理匯總——因為實際工作開發中,往往只需要編譯特定版本的軟件(例如32位release版本),項目創建好后并設置好編譯路徑&#x…