A. ES基本介紹(簡介)
ES,全稱Elasticsearch,是一個基於RESTful介面的開源分布式搜索引擎,構建在Apache Lucene之上。它作為一個文檔資料庫,所有欄位均可索引並支持搜索,支持大規模數據存儲和處理,特別適合處理復雜搜索場景,具有高可用性和可擴展性。
ES的擴展方式分為垂直擴展(升級硬體)和水平擴展(增加伺服器)。默認情況下,它通過內存Gateway存儲索引數據,並能在集群關閉或重啟時從持久化存儲恢復。DistributedLucene Directory負責索引文件的管理,River作為數據源插件引入外部數據,Mapping定義欄位類型和索引規則。
ES的搜索模塊和索引模塊提供基本操作支持,Discovery機制確保集群節點間的協調,包括節點發現和分片管理。Scripting功能允許使用腳本語言進行復雜操作,Transport負責節點間的通信。RESTful風格的API方便了應用編程,而第三方插件(3rd plugins)進一步擴展了其功能。
在實際應用中,ES可以作為網站後端處理大量數據,提供搜索功能;作為現有系統的擴展,增加搜索功能;或作為大規模日誌框架的基礎,支持事件的存儲和分析。設計上,ES的邏輯結構包括文檔(自我包含和層次型的)、類型、欄位和映射,物理結構則涉及節點、分片和復制,以實現數據容量的水平擴展和高可用性。
在傳統資料庫中,數據以B-Tree結構存儲,而在ES中,採用倒排索引,通過Term Index快速定位Term,進而查找包含特定關鍵詞的文檔。ES的索引原理與關系型資料庫的B-Tree索引類似,但處理文本數據時更高效,適合處理大規模的非結構化信息。