Elasticsearch教學


Elasticsearch 是一個建立在全文搜尋引擎 Apache Lucene(TM) 基礎上的搜尋引擎,可以說 Lucene 是當今最先進,最高效的全功能開源搜尋引擎框架。

Elasticsearch是基於Apache Lucene的搜尋伺服器。它由Shay Banon開發並於2010年發布。現在是由Elasticsearch BV負責維護。其最新版本是:5.2.0

Elasticsearch是一個實時分散式和開源的全文搜尋和分析引擎。 它可以從RESTful Web服務介面存取,並使用模式少JSON(JavaScript物件符號)文件來儲存資料。它是基於Java程式設計語言,這使Elasticsearch能夠在不同的平台上執行。使使用者能夠以非常快的速度來搜尋非常大的資料量。

Elasticsearch的特性

Elasticsearch的一般特性如下 -

  • Elasticsearch可延伸高達PB級的結構化和非結構化資料。
  • Elasticsearch可以用來替代MongoDB和RavenDB等做文件儲存。
  • Elasticsearch使用非標準化來提高搜尋效能。
  • Elasticsearch是受歡迎的企業搜尋引擎之一,目前被許多大型組織使用,如Wikipedia,The Guardian,StackOverflow,GitHub等。
  • Elasticsearch是開放原始碼,可在Apache許可證版本2.0下提供。

Elasticsearch的主要概念

Elasticsearch的主要概念如下 -

  • 節點 - 它指的是Elasticsearch的單個正在執行的範例。單個物理和虛擬伺服器容納多個節點,這取決於其物理資源的能力,如RAM,儲存和處理能力。

  • 叢集 - 它是一個或多個節點的集合。 叢集為整個資料提供跨所有節點的集合索引和搜尋功能。

  • 索引 - 它是不同型別的文件和文件屬性的集合。索引還使用分片的概念來提高效能。 例如,一組文件包含社群網路應用的資料。

  • 型別/對映 - 它是共用同一索引中存在的一組公共欄位的文件的集合。 例如,索引包含社群網路應用的資料,然後它可以存在用於使用者簡檔資料的特定型別,另一型別可用於訊息的資料,以及另一型別可用於評論的資料。

  • 文件 - 它是以JSON格式定義的特定方式的欄位集合。每個文件都屬於一個型別並駐留在索引中。每個文件都與唯一識別符號(稱為UID)相關聯。

  • 碎片 - 索引被水平細分為碎片。這意味著每個碎片包含文件的所有屬性,但包含的數量比索引少。水平分隔使碎片成為一個獨立的節點,可以儲存在任何節點中。主碎片是索引的原始水平部分,然後這些主碎片被複製到副本碎片中。

  • 副本 - Elasticsearch允許使用者建立其索引和分片的副本。 複製不僅有助於在故障情況下增加資料的可用性,而且還通過在這些副本中執行並行搜尋操作來提高搜尋的效能。

Elasticsearch的優點

  • Elasticsearch是基於Java開發的,這使得它在幾乎每個平台上都相容。
  • Elasticsearch是實時的,換句話說,一秒鐘後,新增的文件可以在這個引擎中搜尋得到。
  • Elasticsearch是分散式的,這使得它易於在任何大型組織中擴充套件和整合。
  • 通過使用Elasticsearch中的閘道器概念,建立完整備份很容易。
  • 與Apache Solr相比,在Elasticsearch中處理多租戶非常容易。
  • Elasticsearch使用JSON物件作為響應,這使得可以使用不同的程式設計語言呼叫Elasticsearch伺服器。
  • Elasticsearch支援幾乎大部分文件型別,但不支援文字呈現的文件型別。

Elasticsearch的缺點

  • Elasticsearch在處理請求和響應資料方面沒有多語言和資料格式支援(僅在JSON中可用),與Apache Solr不同,Elasticsearch不可以使用CSV,XML等格式。

  • Elasticsearch也有一些傷腦的問題發生,雖然在極少數情況下才會發生。

Elasticsearch和RDBMS之間的比較

在Elasticsearch中,索引是型別的集合,因為資料庫是RDBMS(關聯式資料庫管理系統)中表的集合。每個表都是行的集合,就像每個對映都是JSON物件的Elasticsearch集合一樣。

Elasticsearch 關聯式資料庫
索引 資料庫
碎片 碎片
對映
欄位 欄位
JSON物件 元組