ElasticSearch(ES)簡介及使用指引
- 2019 年 12 月 12 日
- 筆記
ES 簡介
Elasticsearch 是一個分散式、Restful 風格的搜索數據分析引擎,能夠解決常規和各種類型數據的存儲及檢索需求。作為ELK和ElasticStack的核心,它能夠集中存儲數據,通過Elasticsearch 能夠執行及合併多種類型的搜索(結構化數據、非結構化數據、地理位置、經緯度坐標等數據結構)。
ES 的特點和優勢
- 分散式實時文件存儲,可將每一個欄位存入索引,使其可以被檢索到
- 實時分析的分散式搜索引擎,分散式,索引拆分成多個分片,集群中的數據節點可以承載一個或多個分片,並且協調和處理各種操作,負載再平衡和路由大多數情況下自動完成。
- 可以擴張到上百台伺服器,處理PB級別的結構化和非結構化數據,也可以運行在單台PC上。
- 支援插件機制,分詞插件、同步插件、Hadoop插件、可視化插件。
ES 一些基本概念
- Cluster:集群。ES 可以作為一個獨立的單個搜索伺服器。不過,為了處理大型數據集,實現容錯和高可用,ES可以運行在許多相互合作的伺服器上,這些伺服器上的 ES 實例集合成為集群。
- Node:節點。形成集群的每個伺服器上的實例分為節點。
- Shard:分片。當有大量的文檔時,由於記憶體的限制、磁碟處理能力不足、無法足夠快的響應客戶端的請求等,一個節點可能不夠用,這種情況下,數據可以分為較小的分片,每個分片放到不同的伺服器上,當查詢的索引分布在多個分片上時,ES 會把查詢發送給相關的分片,並將結果組合在一起,而應用程式不知道分片的存在,即:這個過程對用戶來說是透明的。
- Replica:副本。為提高查詢吞吐量或實現高可用,可以使用分片副本,副本是一個分片的精確複製,每個分片可以有 0 個或者多個副本。
ES 與傳統資料庫對應關係
ES 和傳統關係型資料庫結構的一些對應關係
關係型數據 |
Elasticsearch |
備註 |
---|---|---|
資料庫 Database |
Index |
|
表 Table |
Type |
6.x 以上已不支援多 type |
記錄 Record |
document |
|
表結構 Scheme |
mapping |
|
列 Column |
Field |
|
ES 的數據結構
ES 存儲的數據欄位類型很豐富,主要有:核心類型、複合類型和特殊類型
一級分類 |
二級分類 |
具體類型 |
---|---|---|
核心類型 |
字元串類型 |
string, text, keyword |
整型類型 |
integer, long, short, byte |
|
浮點類型 |
double, float, half_float, scaled_float |
|
邏輯類型 |
boolean |
|
日期類型 |
date |
|
範圍類型 |
range(integer_range, float_range, long_range, double_range, date_range) |
|
二進位類型 |
binary |
|
複合類型 |
對象類型 |
object |
嵌套類型 |
nested |
|
地理類型 |
地理坐標類型 |
Geo-point |
地理地圖 |
Geo-shape |
|
特殊類型 |
IP 類型 |
ip |
自動補全類型 |
completion |
|
統計類型 |
token_count |
|
附件類型 |
attachement |
|
過濾器類型 |
percolator |
欄位類型說明:
string 類型在舊版本使用較多,從 5.x 開始不再支援 string, 而用 text 和 keyword 替代,text 類型表明,當一個欄位是要被全文搜索的,比如Email內容、產品描述,應該使用text類型,設置text類型以後,欄位內容會被分析和分詞,在生成倒排索引以前,字元串會被分析器分成一個一個詞項。Keyword 類型適用於索引結構化得欄位,keyword類型的欄位只能通過精確值搜索到。
nested 嵌套類型是 object 數據類型的專用版本,允許對象數據可以彼此獨立查詢的方式索引。專用於存儲 JSON 類型數據,可以通過 JSON 內部欄位進行查詢。
geo_point 類型存儲的是經緯度數值,可以按距離對文檔進行排序和過濾,而位置距離計算都可以通過查詢 ES 得出。
ES 的倒排索引
傳統關係型資料庫(以 MySQL 為例),其索引結構是查找樹(「B+」樹)結構,其葉子節點存儲索引數據域,其他節點進行查找索引。其索引過程是直接通過二叉查找樹找到對應記錄。可以理解為通過一列(主鍵索引)或幾列(組合索引)來查找對應記錄。

圖 1.MySQL "B+" Tree Index
而 ES 的索引確十分不同,它是將文檔(document)先經過一定的分詞器分詞之後,存儲分詞結果作為數據索引。倒排索引存儲的是文檔分詞結果與文檔之間的映射關係。

圖 2. ElasticSearch Inverted Index
以上就是 ElasticSearch 的一些基本簡介,下一篇我們繼續討論 ElasticSearch 的基本使用,包括創建索引、數據備份和恢復、索引模板及分片路由的使用。