ElasticSearch

1.elasticsearch是什么

ElasticSearch是一個(gè)基于Lucene的搜索服務(wù)器旺聚。它提供了一個(gè)分布式多用戶能力的全文搜索引擎轴或,基于RESTful web接口。Elasticsearch是用Java開(kāi)發(fā)的库继,并作為Apache許可條款下的開(kāi)放源碼發(fā)布,是當(dāng)前流行的企業(yè)級(jí)搜索引擎。能夠達(dá)到實(shí)時(shí)搜索辫呻,穩(wěn)定,可靠琼锋,快速放闺,安裝使用方便

應(yīng)用案例

1.Github:GitHub使用ElasticSearch搜索20TB的數(shù)據(jù),包括13億文件和1300億行代碼缕坎。

2.elasticsearch能做什么

? ??1怖侦、全文搜索(搜索引擎)

? ??????在一組文檔中查找某一單詞所在文檔及位置

? ??2、模糊匹配

? ??????通過(guò)用戶的輸入去匹配詞庫(kù)中符合條件的詞條

? ??3谜叹、商品搜索

? ??????通過(guò)商品的關(guān)鍵字去數(shù)據(jù)源中查找符合條件的商品

3.elasticsearch的優(yōu)勢(shì)



? ??名詞概念


1.天生支持分布式

Elasticsearch天生就是分布式的础钠,它知道如何管理節(jié)點(diǎn)來(lái)提供高擴(kuò)展和高可用。

1.添加索引

2.增加故障轉(zhuǎn)移

3.橫向擴(kuò)展

4.繼續(xù)擴(kuò)展

5.應(yīng)對(duì)故障

2.倒排索引


?可以看到叉谜,倒排索引是per field的旗吁,一個(gè)字段由一個(gè)自己的倒排索引。18,20這些叫做 term停局,而[1,3]就是posting list很钓。Posting list就是一個(gè)int的數(shù)組,存儲(chǔ)了所有符合某個(gè)term的文檔id董栽。

那么什么是term dictionary 和 term index码倦?

? ? ? ? ?假設(shè)我們有很多個(gè)term,找出某個(gè)特定的term一定很慢锭碳,因?yàn)閠erm沒(méi)有排序袁稽,需要全部過(guò)濾一遍才能找出特定的term。排序之后我們可以用二分查找的方式擒抛,比全遍歷更快地找出目標(biāo)的term推汽。這個(gè)就是 term dictionary。有了term dictionary之后歧沪,可以用 logN 次磁盤查找得到目標(biāo)歹撒。

? ? ? ? ? 但是磁盤的隨機(jī)讀操作仍然是非常昂貴的所以盡量少的讀磁盤,有必要把一些數(shù)據(jù)緩存到內(nèi)存里诊胞。但是整個(gè)term dictionary本身又太大了暖夭,無(wú)法完整地放到內(nèi)存里。于是就有了term index。term index有點(diǎn)像一本字典的大的章節(jié)表迈着。比如:A開(kāi)頭的term ……… Xxx頁(yè)竭望;C開(kāi)頭的term ……… Xxx頁(yè);E開(kāi)頭的term ………Xxx頁(yè)裕菠。

term index壓縮

? ? ? ?例子是一個(gè)包含 "A", "to", "tea", "ted", "ten", "i", "in", 和 "inn" 的 trem 樹(shù)咬清。這棵樹(shù)不會(huì)包含所有的term,它包含的是term的一些前綴糕韧。通過(guò)term index可以快速地定位到term dictionary的某個(gè)offset枫振,然后從這個(gè)位置再往后順序查找。整體上來(lái)說(shuō)就是這樣的效果萤彩。所以term index不需要存下所有的term粪滤,而僅僅是他們的一些前綴與Term Dictionary的block之間的映射關(guān)系,再結(jié)合FST(Finite State Transducers)的壓縮技術(shù)雀扶,可以使term index緩存到內(nèi)存中杖小。從term index查到對(duì)應(yīng)的term dictionary的block位置之后,再去磁盤上找term愚墓,大大減少了磁盤隨機(jī)讀的次數(shù)予权。

FST是啥

????????假設(shè)我們現(xiàn)在要將mop, moth, pop, star, stop and top(term index里的term前綴)映射到序號(hào):0,1浪册,2扫腺,3,4村象,5(term dictionary的block位置)笆环。最簡(jiǎn)單的做法就是定義個(gè)Map,大家找到自己的位置對(duì)應(yīng)入座就好了厚者,但從內(nèi)存占用少的角度想想躁劣,有沒(méi)有更優(yōu)的辦法呢?答案就是:FST

關(guān)于FST的博文:https://www.cnblogs.com/jiu0821/p/7688669.html

term dictionary壓縮

Term dictionary在磁盤上是以分block的方式保存的库菲,一個(gè)block內(nèi)部利用公共前綴壓縮账忘,比如都是Ab開(kāi)頭的單詞就可以把Ab省去。這樣term dictionary可以比b-tree更節(jié)約磁盤空間熙宇。


????????現(xiàn)在我們可以回答“為什么Elasticsearch/Lucene檢索可以比mysql快了鳖擒。Mysql只有term dictionary這一層,是以b-tree排序的方式存儲(chǔ)在磁盤上的奇颠。檢索一個(gè)term需要若干次的random access的磁盤操作败去。

為了提高查詢的效率,減少磁盤尋道次數(shù)烈拒,將多個(gè)值作為一個(gè)數(shù)組通過(guò)連續(xù)區(qū)間存放,一次尋道讀取多個(gè)數(shù)據(jù)

B-tree

而Lucene在term dictionary的基礎(chǔ)上添加了term index來(lái)加速檢索,term index以樹(shù)的形式緩存在內(nèi)存中荆几。從term index查到對(duì)應(yīng)的term dictionary的block位置之后吓妆,再去磁盤上找term,大大減少了磁盤的random access次數(shù)吨铸。


posting list壓縮技巧

Elasticsearch里除了上面說(shuō)到用FST壓縮term index外行拢,對(duì)posting list也有壓縮技巧〉ǎ”posting list不是已經(jīng)只存儲(chǔ)文檔id了嗎舟奠?還需要壓縮?”

嗯房维,我們?cè)倏椿刈铋_(kāi)始的例子沼瘫,如果Elasticsearch需要對(duì)同學(xué)的性別進(jìn)行索引,會(huì)怎樣咙俩?如果有上千萬(wàn)個(gè)同學(xué)耿戚,而世界上只有男/女這樣兩個(gè)性別,每個(gè)posting list都會(huì)有至少百萬(wàn)個(gè)文檔id阿趁。 Elasticsearch是如何有效的對(duì)這些文檔id壓縮的呢膜蛔?

Frame Of Reference

增量編碼壓縮,將大數(shù)變小數(shù)脖阵,按字節(jié)存儲(chǔ)

首先皂股,Elasticsearch要求posting list是有序的(為了提高搜索的性能,再任性的要求也得滿足)命黔,這樣做的一個(gè)好處是方便壓縮呜呐,看下面這個(gè)圖例:

聯(lián)合索引

上面說(shuō)了半天都是單field索引,如果多個(gè)field索引的聯(lián)合查詢纷铣,倒排索引如何滿足快速查詢的要求呢卵史?

利用跳表(Skip list)的數(shù)據(jù)結(jié)構(gòu)快速做“與”運(yùn)算,或者

利用上面提到的bitset按位“與”

先看看跳表的數(shù)據(jù)結(jié)構(gòu):

將一個(gè)有序鏈表level0搜立,挑出其中幾個(gè)元素到level1及l(fā)evel2以躯,每個(gè)level越往上,選出來(lái)的指針元素越少啄踊,查找時(shí)依次從高level往低查找忧设,比如55,先找到level2的31颠通,再找到level1的47址晕,最后找到55,一共3次查找顿锰,查找效率和2叉樹(shù)的效率相當(dāng)谨垃,但也是用了一定的空間冗余來(lái)?yè)Q取的启搂。

跳表原理:https://www.cnblogs.com/a8457013/p/8251967.html

假設(shè)有下面三個(gè)posting list需要聯(lián)合索引:

如果使用跳表,對(duì)最短的posting list中的每個(gè)id刘陶,逐個(gè)在另外兩個(gè)posting list中查找看是否存在胳赌,最后得到交集的結(jié)果。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末匙隔,一起剝皮案震驚了整個(gè)濱河市疑苫,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌纷责,老刑警劉巖捍掺,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異再膳,居然都是意外死亡挺勿,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門饵史,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)满钟,“玉大人,你說(shuō)我怎么就攤上這事胳喷∨确” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵吭露,是天一觀的道長(zhǎng)吠撮。 經(jīng)常有香客問(wèn)我,道長(zhǎng)讲竿,這世上最難降的妖魔是什么泥兰? 我笑而不...
    開(kāi)封第一講書人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮题禀,結(jié)果婚禮上鞋诗,老公的妹妹穿的比我還像新娘。我一直安慰自己迈嘹,他們只是感情好削彬,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著秀仲,像睡著了一般融痛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上神僵,一...
    開(kāi)封第一講書人閱讀 51,443評(píng)論 1 302
  • 那天雁刷,我揣著相機(jī)與錄音,去河邊找鬼保礼。 笑死沛励,一個(gè)胖子當(dāng)著我的面吹牛责语,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播侯勉,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼鹦筹,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼铝阐!你這毒婦竟也來(lái)了址貌?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤徘键,失蹤者是張志新(化名)和其女友劉穎练对,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體吹害,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡螟凭,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了它呀。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片螺男。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖纵穿,靈堂內(nèi)的尸體忽然破棺而出下隧,到底是詐尸還是另有隱情,我是刑警寧澤谓媒,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布淆院,位于F島的核電站,受9級(jí)特大地震影響句惯,放射性物質(zhì)發(fā)生泄漏土辩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一抢野、第九天 我趴在偏房一處隱蔽的房頂上張望拷淘。 院中可真熱鬧,春花似錦指孤、人聲如沸启涯。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)逝嚎。三九已至,卻和暖如春详恼,著一層夾襖步出監(jiān)牢的瞬間补君,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工昧互, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留挽铁,地道東北人伟桅。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像叽掘,于是被迫代替她去往敵國(guó)和親楣铁。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容