Elasticsearch學習四

大綱java

一、lucene和elasticsearch的前世此生
二、elasticsearch的核心概念
三、elasticsearch核心概念 vs. 數據庫核心概念程序員

----------------------------------------------------------------------------------------------------------------------------------------數據庫

一、lucene和elasticsearch的前世此生api

lucene,最早進、功能最強大的搜索庫,直接基於lucene開發,很是複雜,api複雜(實現一些簡單的功能,寫大量的java代碼),須要深刻理解原理(各類索引結構)服務器

elasticsearch,基於lucene,隱藏複雜性,提供簡單易用的restful api接口、java api接口(還有其餘語言的api接口)
(1)分佈式的文檔存儲引擎
(2)分佈式的搜索引擎和分析引擎
(3)分佈式,支持PB級數據restful

開箱即用,優秀的默認參數,不須要任何額外設置,徹底開源數據結構

關於elasticsearch的一個傳說,有一個程序員失業了,陪着本身老婆去英國倫敦學習廚師課程。程序員在失業期間想給老婆寫一個菜譜搜索引擎,以爲lucene實在太複雜了,就開發了一個封裝了lucene的開源項目,compass。後來程序員找到了工做,是作分佈式的高性能項目的,以爲compass不夠,就寫了elasticsearch,讓lucene變成分佈式的系統。運維

----------------------------------------------------------------------------------------------------------------------------------------elasticsearch

二、elasticsearch的核心概念分佈式

(1)Near Realtime(NRT):近實時,兩個意思,從寫入數據到數據能夠被搜索到有一個小延遲(大概1秒);基於es執行搜索和分析能夠達到秒級

(2)Cluster:集羣,包含多個節點,每一個節點屬於哪一個集羣是經過一個配置(集羣名稱,默認是elasticsearch)來決定的,對於中小型應用來講,剛開始一個集羣就一個節點很正常
(3)Node:節點,集羣中的一個節點,節點也有一個名稱(默認是隨機分配的),節點名稱很重要(在執行運維管理操做的時候),默認節點會去加入一個名稱爲「elasticsearch」的集羣,若是直接啓動一堆節點,那麼它們會自動組成一個elasticsearch集羣,固然一個節點也能夠組成一個elasticsearch集羣

(4)Document&field:文檔,es中的最小數據單元,一個document能夠是一條客戶數據,一條商品分類數據,一條訂單數據,一般用JSON數據結構表示,每一個index下的type中,均可以去存儲多個document。一個document裏面有多個field,每一個field就是一個數據字段。

product document

{
  "product_id": "1",
  "product_name": "高露潔牙膏",
  "product_desc": "高效美白",
  "category_id": "2",
  "category_name": "日化用品"
}

(5)Index:索引,包含一堆有類似結構的文檔數據,好比能夠有一個客戶索引,商品分類索引,訂單索引,索引有一個名稱。一個index包含不少document,一個index就表明了一類相似的或者相同的document。好比說創建一個product index,商品索引,裏面可能就存放了全部的商品數據,全部的商品document。
(6)Type:類型,每一個索引裏均可以有一個或多個type,type是index中的一個邏輯數據分類,一個type下的document,都有相同的field,好比博客系統,有一個索引,能夠定義用戶數據type,博客數據type,評論數據type。

商品index,裏面存放了全部的商品數據,商品document

可是商品分不少種類,每一個種類的document的field可能不太同樣,好比說電器商品,可能還包含一些諸如售後時間範圍這樣的特殊field;生鮮商品,還包含一些諸如生鮮保質期之類的特殊field

type,日化商品type,電器商品type,生鮮商品type

日化商品type:product_id,product_name,product_desc,category_id,category_name
電器商品type:product_id,product_name,product_desc,category_id,category_name,service_period
生鮮商品type:product_id,product_name,product_desc,category_id,category_name,eat_period

每個type裏面,都會包含一堆document


{
  "product_id": "2",
  "product_name": "長虹電視機",
  "product_desc": "4k高清",
  "category_id": "3",
  "category_name": "電器",
  "service_period": "1年"
}


{
  "product_id": "3",
  "product_name": "基圍蝦",
  "product_desc": "純自然,冰島產",
  "category_id": "4",
  "category_name": "生鮮",
  "eat_period": "7天"
}

(7)shard:單臺機器沒法存儲大量數據,es能夠將一個索引中的數據切分爲多個shard,分佈在多臺服務器上存儲。有了shard就能夠橫向擴展,存儲更多數據,讓搜索和分析等操做分佈到多臺服務器上去執行,提高吞吐量和性能。每一個shard都是一個lucene index。
(8)replica:任何一個服務器隨時可能故障或宕機,此時shard可能就會丟失,所以能夠爲每一個shard建立多個replica副本。replica能夠在shard故障時提供備用服務,保證數據不丟失,多個replica還能夠提高搜索操做的吞吐量和性能。primary shard(創建索引時一次設置,不能修改,默認5個),replica shard(隨時修改數量,默認1個),默認每一個索引10個shard,5個primary shard,5個replica shard,最小的高可用配置,是2臺服務器。

----------------------------------------------------------------------------------------------------------------------------------------

三、elasticsearch核心概念 vs. 數據庫核心概念

Elasticsearch            數據庫

-----------------------------------------

Document            行 Type                表 Index                庫

相關文章
相關標籤/搜索