什麼是Elasticsearch?
Elasticsearch是一個建立在Apache Lucene庫之上的分佈式、開源搜索和分析引擎。Elasticsearch還提供向量搜索和檢索增強生成(RAG),無縫支持現代AI應用。應用程序可以通過向Elasticsearch集群發送JSON有效載荷來存儲結構化和非結構化數據,可以有或者沒有定義的模式。
Elasticsearch架構
從頭開始,Elasticsearch集群的主要組件包括:
文檔
文檔是Elasticsearch存儲的最小信息記錄,表示為JSON。文檔由多個不同類型的字段(鍵-值對)組成,可以具有預定義的模式,也可以是無模式的,推斷被索引的任何新字段的數據類型。
索引
索引是具有相同模式的文檔的邏輯集合,通過索引名稱標識。
分片
Elasticsearch索引被分割為可管理單元,稱為分片,分片是文檔的集合。分片是搜索的基本單元,並在多個節點之間進行冗余和容錯。
節點
節點是 Elasticsearch 的獨立實例,管理屬於一個或多個索引的一組片段。節點可以擁有不同的角色,如數據節點、主節點和摄取節點。
集群
Elasticsearch 集群是一組互連的節點。集群中的所有節點都可以處理來自客戶端的請求,並相互通信。集群中的每個節點都擁有屬於索引的一部分片段。
查詢架構
以下架構圖概述了搜索請求的流程:
- 用戶或應用程序發出搜索查詢。該查詢可以由集群中的任何節點處理。處理請求的節點是”協調”節點。
- 協調節點將查詢廣播到所有涉及的片段及其副本。
- 每個片段在本地執行查詢並將輕量級結果集返回給協調節點。
- 協調節點合併其接收的結果。這是”查詢”階段的結束。查詢階段識別構成搜索結果的基本文檔,但仍需檢索完整文檔。
- 協調節點向擁有片段發送提取請求,以豐富結果集中的文檔。
- 豐富的文檔返回到協調節點。
- 經過排序和豐富處理後的完整搜索結果集將返回給調用方。
索引架構
以下架構圖說明了索引請求的流程:
- 用戶發送要索引到Elasticsearch的JSON文檔。如果文檔已存在,則新增字段,並覆蓋現有字段。首先接收請求的節點是“協調”節點。
- 協調節點識別傳入文檔的主要片段,通常基於文檔ID,並將請求轉發給擁有主要片段的數據節點。
- 主要片段驗證操作並在本地執行它。
- 然後,主要片段將操作並行轉發給所有副本。
- 副本片段在其節點上本地應用操作。
- 步驟6、7和8顯示了寫入的確認從副本片段到主要片段、協調節點和調用方的過程。
結論
本文描述了Elasticsearch集群的不同組件:文檔、索引、片段和節點。它還概述了搜索請求和索引請求的生命週期。其靈活的架構使得在集群擴展時輕鬆添加和移除節點。結合無模式索引和支持AI搜索功能等功能,這使得Elasticsearch成為組織需要在實時存儲、搜索和分析大量數據時高效進行的事實標準。
Source:
https://dzone.com/articles/elasticsearch-query-and-indexing-architecture