1.es是基于Lucene的全文搜索引擎父叙,通過(guò)倒排索引的方式實(shí)現(xiàn)海量數(shù)據(jù)的快速和近實(shí)時(shí)的搜索徙垫。倒排索引:es的搜索是基于詞的,而詞是由文檔拆分出來(lái)的蛔添,所有的文檔拆分出來(lái)的詞形成了詞典痰催,詞與文檔之間的關(guān)系就形成了倒排索引。集群模式下迎瞧,每個(gè)節(jié)點(diǎn)上存放分片和其他副本分片的夸溶,所有的文檔存放在分片和副本分片,副本分片用于做負(fù)載和數(shù)據(jù)備份
2.es選舉master:es有三種節(jié)點(diǎn):主節(jié)點(diǎn)凶硅、數(shù)據(jù)節(jié)點(diǎn)缝裁、協(xié)調(diào)節(jié)點(diǎn)。主節(jié)點(diǎn):所有索引的操作都是由主節(jié)點(diǎn)執(zhí)行的足绅。首先捷绑,屬性node.master=true的節(jié)點(diǎn)才會(huì)有機(jī)會(huì)成為master節(jié)點(diǎn),選舉期間氢妈,所有節(jié)點(diǎn)將自己一直的節(jié)點(diǎn)進(jìn)行排名打分粹污,返回排名最前的節(jié)點(diǎn)到協(xié)調(diào)節(jié)點(diǎn),協(xié)調(diào)節(jié)點(diǎn)會(huì)進(jìn)行統(tǒng)計(jì)首量,將票數(shù)最多的節(jié)點(diǎn)設(shè)置為master壮吩。另外會(huì)設(shè)置最小選舉數(shù)來(lái)防止腦裂問(wèn)題进苍,官方推薦將最小選舉數(shù)設(shè)為n/2 +1,即票數(shù)設(shè)為超過(guò)半數(shù)鸭叙,票數(shù)不夠是會(huì)重新選舉觉啊。腦裂問(wèn)題:當(dāng)選舉出來(lái)有兩個(gè)節(jié)點(diǎn)的票數(shù)一樣。
3.es索引文檔的過(guò)程:當(dāng)索引請(qǐng)求過(guò)來(lái)后递雀,會(huì)先將數(shù)據(jù)寫(xiě)到內(nèi)存中,同時(shí)會(huì)記錄一個(gè)translog蚀浆,(translog是保證數(shù)據(jù)安全的關(guān)鍵)然后會(huì)每隔1秒鐘將數(shù)據(jù)寫(xiě)到系統(tǒng)緩存中缀程,形成segment分段,此時(shí)文檔數(shù)據(jù)是可以被檢索到的市俊,當(dāng)segment過(guò)多或者translog文件過(guò)大會(huì)進(jìn)行一次持久化杨凑,持久化的過(guò)程是先將segment分段合并成一個(gè)大的segment并刪除所有小的segment分段,然后再講大的segment持久化到磁盤(pán)上摆昧,結(jié)束后會(huì)刪除segment和translog文件撩满。其中translog文件時(shí)保證數(shù)據(jù)安全的關(guān)鍵:因?yàn)楫?dāng)數(shù)據(jù)還在緩存中的時(shí)候突然斷電,就會(huì)造成數(shù)據(jù)丟失绅你,所以es會(huì)記錄translog伺帘,而且只有當(dāng)translog記錄成功后才會(huì)返回客戶(hù)端操作成功。
4.es搜索的過(guò)程:默認(rèn)會(huì)用query then fetch 策略忌锯,首先搜索請(qǐng)求會(huì)分發(fā)到各分片伪嫁,每個(gè)分片會(huì)根據(jù)自身的打分規(guī)則篩選出符合要求的文檔ID 到協(xié)調(diào)節(jié)點(diǎn),然后協(xié)調(diào)節(jié)點(diǎn)對(duì)所有分片返回的數(shù)據(jù)再次打分偶垮,并根據(jù)打分結(jié)果再次去分片中獲取文檔數(shù)據(jù)张咳,最終返回到用戶(hù)
5.刪除和修改:es不會(huì)對(duì)文檔進(jìn)行真實(shí)的物理刪除,而是在修改或刪除是將舊的文檔數(shù)據(jù)標(biāo)記問(wèn)刪除狀態(tài)似舵,在檢索過(guò)程中也是可以搜索得到的脚猾,只是在最終返回的時(shí)候過(guò)濾了刪除態(tài)的文檔數(shù)據(jù)