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 的基本使用,包括創建索引、數據備份和恢復、索引模板及分片路由的使用。