1.什么是ES?
ES全稱elasticsearch,是基于lucene的全文搜索引擎,能夠?qū)A繑?shù)據(jù)的存儲(chǔ)和高速檢索.
lucene是阿帕奇的開(kāi)源搜索引擎框架,用于處理純文本數(shù)據(jù),提供建立索引,執(zhí)行搜索等接口,不提供分布式服務(wù),分布式服務(wù)是有es提供的,包括數(shù)據(jù)的存儲(chǔ).
2.ES常見(jiàn)應(yīng)用場(chǎng)景:
電商項(xiàng)目的商品搜索;
ELK日志系統(tǒng);
概念:
es中有幾個(gè)比較重要的概念,index,type,document,field.那這幾個(gè)名詞代表什么呢?下面就拿es和關(guān)系型數(shù)據(jù)庫(kù)做一個(gè)比較:
index————》dataBase
type————〉table
document————》row
field————〉col
說(shuō)明:index相當(dāng)于mysql的一個(gè)數(shù)據(jù)庫(kù);type相當(dāng)于一張表(es6之后取消了type,相當(dāng)于一個(gè)index只有一個(gè)type);document相當(dāng)于表中的一條記錄;field相當(dāng)于表的一個(gè)字段.
es之所以查詢速度快,是因?yàn)閑s采用的的是倒排索引的方式存儲(chǔ)和管理數(shù)據(jù),倒排索引:ES的搜索是基于文檔(document)的,每個(gè)文檔的內(nèi)容會(huì)被分成一個(gè)個(gè)的詞(term),所有的詞形成了詞典(term list).es在存儲(chǔ)數(shù)據(jù)時(shí)就會(huì)對(duì)doc進(jìn)行拆分成term,然后會(huì)將這些term和doc進(jìn)行關(guān)聯(lián)形成倒排文件.下面舉例說(shuō)明:

說(shuō)明:doc1和doc2為兩個(gè)文檔,當(dāng)這兩個(gè)文檔存儲(chǔ)到es時(shí),會(huì)對(duì)這兩個(gè)文檔進(jìn)行分詞,常見(jiàn)的為ik分詞器,形成了表格中的詞(term)列,詞所在的文檔以及在文檔中出現(xiàn)的頻率(此外還包含在文檔中的位置,本文沒(méi)有展示),展示在表格的第二列.
在實(shí)際工作中,es是以集群部署的,這樣保證了系統(tǒng)的可靠性,同時(shí)也能實(shí)現(xiàn)PB級(jí)的數(shù)據(jù)存儲(chǔ).在集群中,clusterName相同的服務(wù)屬于同一個(gè)集群,每臺(tái)服務(wù)就是集群的一個(gè)node(節(jié)點(diǎn)),es的節(jié)點(diǎn)主要分為:主節(jié)點(diǎn),數(shù)據(jù)節(jié)點(diǎn),協(xié)調(diào)節(jié)點(diǎn).主節(jié)點(diǎn)(master node):全局唯一,主要負(fù)責(zé)集群方面的管理,包括對(duì)索引的管理,一般不存儲(chǔ)數(shù)據(jù);數(shù)據(jù)節(jié)點(diǎn)(data node):用于存儲(chǔ)數(shù)據(jù);協(xié)調(diào)節(jié)點(diǎn):用于在索引文檔時(shí),將各個(gè)節(jié)點(diǎn)返回的數(shù)據(jù)進(jìn)行統(tǒng)一處理,最終返回個(gè)客戶端.
創(chuàng)建索引時(shí)需要指定分片數(shù)和副本分片數(shù),默認(rèn)5個(gè)分片,每個(gè)分片1個(gè)副本分片,主分片要在創(chuàng)建索引時(shí)就固定,副本分片可以后期修改.一般設(shè)計(jì)的依據(jù)是當(dāng)前服務(wù)器的配置,以及考慮后期業(yè)務(wù)數(shù)據(jù)的增長(zhǎng)量.當(dāng)一個(gè)索引的數(shù)據(jù)量很大的時(shí)候,可以考慮使用索引別名來(lái)管理多個(gè)索引,或者創(chuàng)建顆粒度更細(xì)的索引,例如在日志系統(tǒng)中,為相同的業(yè)務(wù)日志每天都創(chuàng)建一個(gè)索引.

未完待續(xù)........