elasticsearch學習筆記(三)——Elasticsearch的核心概念

下面來經過lucene引出Elasticsearch的核心概念java

一、lucene和elasticsearch的前世此生

lucene是最早進、功能強大的搜索庫。可是直接基於lucene開發,會很是的複雜。它的api很複雜,只是實現一些簡單的功能,可能就須要寫大量的java代碼。要用好lucene,須要深刻了解其內部原理,包括各類索引結構。
而elasticsearch,它是基於lucene,隱藏了lucene的複雜性,對外提供簡單易用的restful api接口、java api接口等等。
關於elasticsearch的一個傳說,聽說有一個程序員失業了,陪着老婆去英國倫敦學習廚師課程。看着老婆每次查找菜譜特別費勁,因而就想給老婆寫一個菜譜搜索引擎,準備使用lucene,可是發現lucene實在是太複雜了,就開發了一個封裝了lucene的開源項目,compass。後來程序員找到工做了,是作分佈式的高性能項目的,就以爲本身封裝的開源項目compass也不夠用了,就寫了elasticsearch,讓lucene變成分佈式的系統。程序員

二、elasticsearch的核心概念

(1)Near Realtime(NRT):近實時,兩層意思,一個是寫入數據到數據能夠被搜索到有一個小延遲(大概1s左右),一個是基於ES執行搜索和分析能夠達到秒級
(2)Cluster:集羣,包含多個節點,每一個節點屬於哪一個集羣是經過一個叫作集羣名稱的配置來決定的。對於中小型應用來講,剛開始一個集羣就一個節點很正常
(3)Node:節點,集羣中的一個節點,節點也有一個名稱默認是隨機分配的,也能夠手動指定,當咱們在執行運維管理操做的時候節點的名稱很重要
(4)Document&field:文檔,es中最小的數據單元。一個document能夠是一條客戶數據,一條商品分類數據,一條訂單數據,一般用JSON數據結構表示,每一個index的type中均可以去存儲多個document。一個document裏面有不少個field,每一個field就是一個數據字段。
(5)Index:索引,包含一堆有相似結構的文檔數據。好比能夠有一個客戶索引,商品分類索引,訂單索引,索引有一個名稱。一個index包含不少document,一個index就表明了一類相似的或者相同的document。好比說創建一個product index,商品索引,裏面可能就存放了全部的商品數據,全部的商品document。
(6)Type:類型,每一個索引裏均可以有一個type,以後更高級的版本可能會去掉這一個概念。type是index中的一個邏輯數據分類,一個type下的document,都有相同的field,好比博客系統,有一個索引,能夠定義用戶數據type
(7)shard:分片,單臺機器沒法存儲大量數據,es能夠將一個索引中的數據切分爲多個shard,分佈在多臺服務器上存儲。有了shard就能夠橫向擴展,存儲更多的數據,讓搜索和分析等操做分佈到多臺服務器上去執行,提高吞吐量和性能。每一個shard都是一個lucene index。
(8)replica:任何一個服務器隨時可能故障或宕機,此時shard可能就會丟失,所以能夠爲每一個shard建立多個replica副本。replica能夠在shard故障時提供備用服務,保證數據不丟失,多個replica還能夠提高搜索操做的吞吐量和性能。primary shard(創建索引時一次設置,不能修改,默認是5個),replica(隨時修改數量,默認是1個)。默認每一個索引10個shard,5個primary shard,5個replica shard,最小的高可用配置是2臺服務器數據庫

三、elasticsearch核心概念和數據庫核心概念

Elasticsearch | Document | Index (Type)
數據庫 | 行 | 表api

相關文章
相關標籤/搜索