經過 30 天每天不懈地撰寫關於 Elasticsearch ( 以下簡稱 ES ) 的文章之後,產生了一些新的想法,就是在腦袋中繪製出學習 ES 的框架。
通常該怎麼學這種事情應該是要放在第一天,但很抱歉,我也是這 30 天不斷地學習新的知識,漸漸地才交織出一個關於 ES 模糊的畫面。
我會把整個學習的地圖拆分成下面幾個區塊:
基本架構以及設定
這個部分也是這 30 天一開始的文章在撰寫的內容,包含該如何在本地啟動 ES 的環境,透過 Kibana 的 DevTools 來檢查叢集的設定,了解 cluster、node、index 分別代表什麼。
關於 cluster 和 node 的設定,因為不是在 production 的環境下,所以就沒有提到太多的設定細節。
至於 index,要理解的一定是 primary shard 和 replica shard 之間的差異,在設定的時候就需要理解這個 index 的用途才可以擁有一個合理的設定。
以下的文章都有提到這些內容:
- 使用 Docker 啟動 Elasticsearch 以及 Kibana
- Elasticsearch - 基本架構
- Elasticsearch - 探索叢集
- Elasticsearch - Primary Shard 主要分片
- Elasticsearch - Replica Shard 複製分片 & Snapshot 快照
透過上述的內容,你已經可以了解 ES 的最基本的型態,腦中應該已經有一個畫面了。
資料處理
當建立好了基本的架構之後,我們要開始針對資料進行基本的 CRUD,這時候開始真的有使用到這個工具的感覺了,透過不同的 API 來達到相同的效果。
我們有解釋到了如何使用 script 的方式,以及 bulk 的方式;甚至進階的 ReIndex 以及 Alias 都是拿來處理資料的 API。
以下的文章都有提到這些內容:
- Elasticsearch - Index & Document 的 CRUD
- Elasticsearch - 使用 Script 來更新欄位
- Elasticsearch - Upsert & Routing
- Elasticsearch - Update & Delete by query
- Elasticsearch - Bulk Import
- Elasticsearch - ReIndex & Alias API
運作機制和原理
在知道怎麼使用之後,就到了要知道為什麼的時候了!
包含了 ES 是如何處理 race condition 以及資料是如何儲存的,這個區塊特別重要,API 可以忘記但是運作的機制和原理必須要熟記。
希望你還記得 Analyzer 是怎麼處理句子的,不同類型的資料是怎麼儲存的。
如果你忘記了,這些文章都有包含這些內容:
- Elasticsearch - 寫入資料以及基礎的錯誤恢復機制
- Elasticsearch - Versioning 以及樂觀鎖
- Elasticsearch - Analyzer 介紹
- Elasticsearch - 使用 Analyze API 以及 Inverted indices
- Elasticsearch - Mapping 以及基礎資料類型
- Elasticsearch - 資料類型的強制轉換
搜尋
這也是我們寫的最後一個區塊,礙於真的沒有時間研究部署相關的議題,所以最後也停在了搜尋的應用上面,但我相信以一個後端工程師來說,理解如何使用就很足夠了,很多時候部署和維護不一定是你的工作,不需要太擔心這件事。
至於搜尋,我們從 term level -> full test -> phrase match -> fuzzy match 學習了四種不同的搜尋方式,當然這離完全掌握 ES 的使用還很遙遠 ( 尤其是 boolean logic 的搜尋 ),但已經可以讓你講出一些知識了!
啊!還有評分,這很重要,你一定要記得!
下面是這些文章的連結和內容:
- Elasticsearch - 搜尋簡介
- Elasticsearch - Term Level Query
- Elasticsearch - Full Text Query ( 全文搜尋 )
- Elasticsearch - 介紹評分 ( Scoring )
- Elasticsearch - 如何一次搜尋多個欄位
- Elasticsearch - Phrase Search
- Elasticsearch - Fuzzy Match Query ( 模糊搜尋 )
- Elasticsearch - 如何控制回傳結果
還有什麼可以去學習的?
還有非常多的技巧,像是 JOIN 的查詢、資料的 aggregation、如何使用 beats 來處理資料、如何 highlight 資料?
當然,如果你是一個 DevOps,如何擴展整個 nodes 甚至是跨叢集溝通以及該如何設置一個好擴展的叢集等等。
所以你還可以往這幾個方向去閱讀,如果你有興趣的話。
結語
很高興你閱讀到這第 30 天的文章,這種提供 roadmap 的文章確實該放在第一天,但如同我說的,這也是我自己的學習歷程,就當作最後一天給我自己重新整理一下我到底學了什麼以及還有什麼沒有學習到的。