Elasticsearch 是一個建立在全文搜尋引擎 Apache Lucene™ 基礎上的搜尋引擎,可以說 Lucene 是當今最先進,最高效的全功能開源搜尋引擎架構。
Elasticsearch是基于Apache Lucene的搜尋伺服器。它由Shay Banon開發并于2010年釋出。現在是由Elasticsearch BV負責維護。其最新版本是:
5.2.0
。
Elasticsearch是一個實時分布式和開源的全文搜尋和分析引擎。 它可以從RESTful Web服務接口通路,并使用模式JSON(JavaScript對象符号)文檔來存儲資料(解釋:Elasticsearch隻支援json)。它是基于Java程式設計語言,這使Elasticsearch能夠在不同的平台上運作。使使用者能夠以非常快的速度來搜尋非常大的資料量。
Elasticsearch的特性
- Elasticsearch可擴充高達PB級的結構化和非結構化資料。
- Elasticsearch可以用來替代MongoDB和RavenDB等做文檔存儲。
- Elasticsearch使用非标準化來提高搜尋性能。
- Elasticsearch是受歡迎的企業搜尋引擎之一,目前被許多大型組織使用,如Wikipedia,The Guardian,StackOverflow,GitHub等。
- Elasticsearch是開放源代碼,可在Apache許可證版本2.0下提供。
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也有一些傷腦的問題發生,雖然在極少數情況下才會發生。