Elasticsearch-01.初識Elasticsearch

本系列博客基於Elasticsearch 7.0進行編寫,旨在對自己的所學進行結構化輸出,查漏補缺。

什麼是Elasticsearch

Elasticsearch是一個搜索、存儲和數據分析引擎,具有分佈式、高性能、高可用、可伸縮、易維護的特點。

Elasticsearch並非從零起步,而是站在巨人的肩膀上。Elasticsearch基於Java編寫,其內部使用Lucene做索引與搜索。通過進一步封裝Lucene,向開發人員屏蔽了Lucene的複雜性。開發人員無須深入瞭解檢索的相關知識來理解它是如何工作的,只需使用一套簡單一致的RESTfulAPI即可,從此全文搜索變得簡單。

傳統關係型數據庫的弊端

基於Like的查詢會造成索引失效,查詢時間複雜度O(n)。

Lucene的弊端

Lucene雖然提供了倒排索引的功能,但是本身只支持單點。如果需要搭建集羣,需要自行實現集羣管理與負載均衡。同時,Lucene提供的API比Elasticsearch複雜的多。

Elasticsearch優點
  • 面向開發者友好,零配置,易裝易用。
  • ES基於Lucene提供了很多高級功能:複合查詢、聚合分析、基於地理位置等。
  • 相遇傳統數據庫,提供了全文檢索,同義詞處理(美麗的cls>漂亮的cls),相關度排名。聚合分析以及海量數據的近實時(NTR)處理,這些傳統數據庫完全做不到。
  • 實時分析的分佈式搜索引擎。Elasticsearch的索引分拆成多個分片,每個分片可以有零個或多個副本。集羣中的每個數據節點都可承載一個或多個分片,並且協調和處理各種操作;負載再平衡和路由會自動完成。
  • 高可拓展性。大規模應用方面,Elasticsearch可以擴展到上百臺服務器,處理PB級別的結構化或非結構化數據。
  • 可插拔插件支持。Elasticsearch支持多種插件,如分詞插件、同步插件、Hadoop插件、可視化插件等。
常用應用領域
  • 全文檢索、搜索推薦。
  • 用戶行爲日誌
  • Business Intelligence, Data Analysis.

核心概念

Elasticsearch的核心概念有Node、Cluster、Shards、Replicas、Index、Type、Document、Settings、Mapping和Analyzer。

Node 節點

節點是組成Elasticsearch集羣的基本服務單元,集羣中的每個運行中的Elasticsearch服務器都可稱之爲節點。

在Elasticsearch集羣中,節點有三種狀態。

  • Green:表示節點運行狀態爲健康狀態。所有的主分片和副本分片都可以正常工作,集羣100%健康。
  • Yellow:黃色,表示節點的運行狀態爲預警狀態。所有的主分片都可以正常工作,但至少有一個副本分片是不能正常工作的。此時集羣依然可以正常工作,但集羣的高可用性在某種程度上被弱化。
  • Red:紅色,表示集羣無法正常使用。此時,集羣中至少有一個分片的主分片及它的全部副本分片都不可正常工作。雖然集羣的查詢操作還可以進行,但是也只能返回部分數據(其他正常分片的數據可以返回),而分配到這個有問題分片上的寫入請求將會報錯,最終導致數據丟失。
Cluster 集羣

Elasticsearch的集羣是由具有相同 cluster.name(默認值爲elasticsearch)的一個或多個Elasticsearch節點組成的,各個節點協同工作,共享數據。同一個集羣內節點的名字不能重複,但集羣名稱一定要相同。在實際使用Elasticsearch集羣時,一般需要給集羣起一個合適的名字來替代cluster.name的默認值。自定義集羣名稱的好處是,可以防止一個新啓動的節點加入相同網絡中的另一個同名的集羣中。

Shards 分片

當索引的數據量太大時,受限於單個節點的內存、磁盤處理能力等,節點無法足夠快地響應客戶端的請求,此時需要將一個索引上的數據進行水平拆分。拆分出來的每個數據部分稱之爲一個分片。一般來說,每個分片都會放到不同的服務器上。進行分片操作之後,索引在規模上進行擴大,性能上也隨之水漲船高的有了提升。Elasticsearch依賴Lucene,Elasticsearch中的每個分片其實都是Lucene中的一個索引文件,因此每個分片必須有一個主分片和零到多個副本分片。當軟件開發人員在一個設置有多分片的索引中寫入數據時,是通過路由來確定具體寫入哪個分片中的,因此在創建索引時需要指定分片的數量,並且分片的數量一旦確定就不能更改。當軟件開發人員在查詢索引時,需要在索引對應的多個分片上進行查詢。Elasticsearch會把查詢發送給每個相關的分片,並彙總各個分片的查詢結果。對上層的應用程序而言,分片是透明的,即應用程序並不知道分片的存在。在Elasticsearch中,默認爲一個索引創建5個主分片,並分別爲每個主分片創建一個副本。

Replicas 備份/副本

副本指的是對主分片的備份,這種備份是精確複製模式。每個主分片可以有零個或多個副本,主分片和備份分片都可以對外提供數據查詢服務。當構建索引進行寫入操作時,首先在主分片上完成數據的索引,然後數據會從主分片分發到備份分片上進行索引。當主分片不可用時,Elasticsearch會在備份分片中選舉出一個分片作爲主分片,從而避免數據丟失。一方面,備份分片既可以提升Elasticsearch系統的高可用性能,又可以提升搜索時的併發性能;另一方面,備份分片也是一把雙刃劍,即如果備份分片數量設置得太多,則在寫操作時會增加數據同步的負擔。

Index 索引

在Elasticsearch中,索引由一個和多個分片組成。在使用索引時,需要通過索引名稱在集羣內進行唯一標識。

Type 類別

類別指的是索引內部的邏輯分區,通過Type的名字在索引內進行唯一標識。在查詢時如果沒有該值,則表示需要在整個索引中查詢。

Document 文檔

索引中的每一條數據叫作一個文檔,與關係數據庫的使用方法類似,一條文檔數據通過_id在Type內進行唯一標識。

Settings

Settings是對集羣中索引的定義信息,比如一個索引默認的分片數、副本數等。

Mapping

Mapping表示中保存了定義索引中字段(Field)的存儲類型、分詞方式、是否存儲等信息,有點類似於關係數據庫(如MySQL)中的表結構信息。在Elasticsearch中,Mapping是可以動態識別的。如果沒有特殊需求,則不需要手動創建Mapping,因爲Elasticsearch會根據數據格式自動識別它的類型。當需要對某些字段添加特殊屬性時,如定義使用其他分詞器、是否分詞、是否存儲等,就需要手動設置Mapping了。一個索引的Mapping一旦創建,若已經存儲了數據,就不可修改了。

Analyzer 分詞器

一個Analyzer通常由一個Tokenizer和零到多個Filter組成。在Elasticsearch中,默認的標準Analyzer包含一個標準的Tokenizer和三個Filter,即Standard Token Filter、Lower Case Token Filter和Stop TokenFilter。

參考資料

[1] feintkotlin.兩分鐘帶你認識倒排索引.https://www.bilibili.com/video/BV1db411g79H

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章