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對象 元組