elasticsearch入門(mén)

Elasticsearch簡(jiǎn)介

什么是elasticsearch?

Elasticsearch是一個(gè)基于Apache Lucene(TM)的開(kāi)源搜索引擎漫玄。無(wú)論在開(kāi)源還是專(zhuān)有領(lǐng)域,Lucene可以被認(rèn)為是迄今為止最先進(jìn)母债、性能最好的兵琳、功能最全的搜索引擎庫(kù)蚀苛。

但是磅甩,Lucene只是一個(gè)庫(kù)统阿。想要使用它彩倚,你必須使用Java來(lái)作為開(kāi)發(fā)語(yǔ)言并將其直接集成到你的應(yīng)用中,更糟糕的是扶平,Lucene非常復(fù)雜署恍,你需要深入了解檢索的相關(guān)知識(shí)來(lái)理解它是如何工作的。

Elasticsearch也使用Java開(kāi)發(fā)并使用Lucene作為其核心來(lái)實(shí)現(xiàn)所有索引和搜索的功能蜻直,但是它的目的是通過(guò)簡(jiǎn)單的RESTful API來(lái)隱藏Lucene的復(fù)雜性,從而讓全文搜索變得簡(jiǎn)單袁串。

不過(guò)概而,Elasticsearch不僅僅是Lucene和全文搜索,我們還能這樣去描述它:

分布式的實(shí)時(shí)文件存儲(chǔ)囱修,每個(gè)字段都被索引并可被搜索

分布式的實(shí)時(shí)分析搜索引擎

可以擴(kuò)展到上百臺(tái)服務(wù)器赎瑰,處理PB級(jí)結(jié)構(gòu)化或非結(jié)構(gòu)化數(shù)據(jù)

而且,所有的這些功能被集成到一個(gè)服務(wù)里面破镰,你的應(yīng)用可以通過(guò)簡(jiǎn)單的RESTful API餐曼、各種語(yǔ)言的客戶(hù)端甚至命令行與之交互。

上手Elasticsearch非常容易鲜漩。它提供了許多合理的缺省值源譬,并對(duì)初學(xué)者隱藏了復(fù)雜的搜索引擎理論。它開(kāi)箱即用(安裝即可使用)孕似,只需很少的學(xué)習(xí)既可在生產(chǎn)環(huán)境中使用踩娘。

Elasticsearch在Apache 2 license下許可使用,可以免費(fèi)下載喉祭、使用和修改养渴。

隨著你對(duì)Elasticsearch的理解加深雷绢,你可以根據(jù)不同的問(wèn)題領(lǐng)域定制Elasticsearch的高級(jí)特性,這一切都是可配置的理卑,并且配置非常靈活翘紊。

elasticsearch與solr對(duì)比

1)http://i.zhcy.tk/blog/elasticsearchyu-solr/

2)http://solr-vs-elasticsearch.com/

總的來(lái)說(shuō):elasticsearch在實(shí)時(shí)搜索、分布式管理上優(yōu)于solr藐唠。

elasticsearch術(shù)語(yǔ)

1)NRT(Near Realtime)

在增刪改后帆疟,有refresh interval秒(通常是1s)的延遲才能反映到數(shù)索引里。

2) ?集群

多個(gè)節(jié)點(diǎn)邏輯上表現(xiàn)為一個(gè)結(jié)點(diǎn)中捆,統(tǒng)一對(duì)外提供index和search服務(wù)鸯匹;一個(gè)ES實(shí)例可以包含多個(gè)集群,每一個(gè)集群通過(guò)cluster name來(lái)標(biāo)識(shí)泄伪。

3)Node

指定節(jié)點(diǎn)名稱(chēng)殴蓬,不指定的話(huà)是隨機(jī)的;節(jié)點(diǎn)具有index和search能力蟋滴。

4)index索引

文檔集合染厅;一個(gè)集群可以有多個(gè)索引。

5)type

一個(gè)索引可以有多個(gè)type津函,一個(gè)type里面包含一類(lèi)文檔肖粮。類(lèi)比數(shù)據(jù)就是表table。

6)文檔

json形式的數(shù)據(jù)結(jié)構(gòu)尔苦,類(lèi)比數(shù)據(jù)庫(kù)就是表中的一條記錄涩馆。

7)shard & replicas 主分片和副本

一個(gè)索引中的數(shù)據(jù),會(huì)被分成多個(gè)shard允坚,存儲(chǔ)在1個(gè)或多個(gè)節(jié)點(diǎn)里魂那。每個(gè)shard其實(shí)就是一個(gè)功能獨(dú)立的索引,放在哪個(gè)節(jié)點(diǎn)都可以工作稠项。(可以增加水平擴(kuò)展能力涯雅,和并行處理能力)

副本是主分片的副本,主分片不可用時(shí)候的備份展运。每個(gè)主分片可以有多個(gè)副本活逆。高可用的保障。

2 集群安裝

1) 壓縮包解壓 直接elasticsearch -d后臺(tái)執(zhí)行

Note:

官方推薦的系統(tǒng)配置:

1 文件描述符推薦32k和64k

2 vm.max_map_counts=262144

3 鎖住內(nèi)存拗胜,禁止swap

3 深入原理

3.1 es是如何啟動(dòng)的?

1)每個(gè)es實(shí)例啟動(dòng)的時(shí)候蔗候,都會(huì)使用自動(dòng)發(fā)現(xiàn)機(jī)制,發(fā)現(xiàn)其他節(jié)點(diǎn)

2)自動(dòng)發(fā)現(xiàn)機(jī)制有多播和單播兩種

3)不同網(wǎng)段間的多播會(huì)失效

4)可以直接禁止多播挤土,只使用單播

5) 啟動(dòng)的過(guò)程中會(huì)選舉master節(jié)點(diǎn)琴庵,master選舉后,一個(gè)集群才成立。

Note:

選舉master節(jié)點(diǎn)的迷殿,最小master數(shù)量節(jié)點(diǎn)設(shè)置

discovery.zen.minimum_master_nodes = number of master / 2 + 1儿礼;

防止腦裂:腦裂就是一個(gè)集群被分為多個(gè)集群,有多個(gè)master同時(shí)存在庆寺。

3.2 es是如何索引的蚊夫?

1)首先創(chuàng)建索引

2)然后創(chuàng)建type和mapping

3)將索引的doc,寫(xiě)到主分片懦尝。

5)主分片會(huì)同步到副本后知纷,返回索引請(qǐng)求。

3.3 es是如何查詢(xún)的陵霉?

1)搜索相比索引會(huì)更復(fù)雜琅轧,因?yàn)樵谒阉髦心男ヾoc會(huì)被命中以及它們的分片分布是未知的

2)查詢(xún)分兩個(gè)階段,第一個(gè)階段是查詢(xún)階段(query)

3)查詢(xún)階段里踊挠,搜索請(qǐng)求會(huì)廣播給所有分片(主分片或副本)乍桂,每個(gè)分片會(huì)在本地執(zhí)行該搜索,匹配的文檔被保存到一個(gè)優(yōu)先隊(duì)列中效床,隊(duì)列大小=offset + limit睹酌。

4)每個(gè)分片都準(zhǔn)備好了隊(duì)列后,將ids和需要排序的字段剩檀,如_score返回給協(xié)調(diào)節(jié)點(diǎn)憋沿。

5)協(xié)調(diào)節(jié)點(diǎn)會(huì)將所有doc排序后放入優(yōu)先級(jí)隊(duì)列,然后執(zhí)行獲取數(shù)據(jù)階段(fetch)

6)協(xié)調(diào)節(jié)點(diǎn)執(zhí)行fetch階段的時(shí)候沪猴,是經(jīng)過(guò)優(yōu)化考慮的辐啄,會(huì)進(jìn)行multiget批量獲取數(shù)據(jù)。

7)所有數(shù)據(jù)獲取之后运嗜,response则披。

3.4 es數(shù)據(jù)是如何寫(xiě)到磁盤(pán)的

1)數(shù)據(jù)要想searchable,必須是存在段文件(segment)的洗出,segment就是倒排索引。

2) ?數(shù)據(jù)來(lái)源是內(nèi)存buffer图谷,新的索引數(shù)據(jù)首先到內(nèi)存中翩活,然后經(jīng)過(guò)refresh_interval的時(shí)間會(huì)建立segment文件寫(xiě)到文件系統(tǒng)緩存中,此時(shí)可以提供搜索便贵。

3)索引數(shù)據(jù)在寫(xiě)入內(nèi)存buffer的同時(shí)菠镇,還會(huì)記錄事務(wù)日志,保證數(shù)據(jù)可靠承璃。

4)經(jīng)過(guò)默認(rèn)30分鐘利耍,或事務(wù)日志大小超過(guò)一定范圍,會(huì)強(qiáng)制將文件系統(tǒng)緩存flush到disk中,這樣segment文件就寫(xiě)入磁盤(pán)了隘梨,事物日志也會(huì)清除程癌,commit文件也會(huì)隨之更新(commit文件記錄了segment的信息)。

3.5 每個(gè)refresh-intalval間隔都會(huì)產(chǎn)生segment文件轴猎,文件太多怎么辦嵌莉?

1)文件過(guò)多會(huì)導(dǎo)致文件句柄,內(nèi)存捻脖,cpu的消耗锐峭,因?yàn)槊總€(gè)segment文件都要參與計(jì)算的。

2)es對(duì)此有segment文件合并機(jī)制可婶。是額外線(xiàn)程后臺(tái)負(fù)責(zé)執(zhí)行的沿癞,segment文件merge的時(shí)候,也是邏輯刪除的doc被物理刪除的時(shí)機(jī)矛渴。

3)大小相似的segment會(huì)被選中進(jìn)行merge椎扬,merge成較大的segment,merge完成之后曙旭,新生成的大segment提供search盗舰,舊的小segment被物理delete

4) 可視化直觀感受下lucene的合并:http://blog.mikemccandless.com/2011/02/visualizing-lucenes-segment-merges.html

3.6 控制doc落在哪個(gè)shard?

1)依賴(lài)的是elasticsearch的路由機(jī)制(_reroute)

2)默認(rèn)路由使用_id, (_id % number of shard)

3) 在索引的時(shí)候可以自定義路由桂躏,比如bizacctid钻趋,那么同一商家的項(xiàng)目會(huì)落在同一shard。(好處是搜索請(qǐng)求不用廣播剂习,就可以直接去指定shard搜索蛮位,弊端是有可能造成shard的大小不均)。

3.7 es使用的緩存鳞绕?

1)過(guò)濾器緩存,filter cache,默認(rèn)占用10%heap失仁,LRU換出策略。Node級(jí)別们何,記錄那些doc符合此filter萄焦,使用數(shù)據(jù)結(jié)構(gòu)是bitset,空間占用少冤竹。

2)field cache緩存拂封。

需要訪問(wèn)字段值的時(shí)候,例如根據(jù)某個(gè)字段排序鹦蠕,需要知道doc的field的value是什么冒签,倒排索引不能完成這個(gè),所以類(lèi)似將倒排倒轉(zhuǎn)過(guò)來(lái)钟病,存儲(chǔ)在heap緩存中萧恕,只進(jìn)不出刚梭。容易OOM

只進(jìn)不出是因?yàn)榻ield data是一個(gè)耗時(shí)的動(dòng)作。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末票唆,一起剝皮案震驚了整個(gè)濱河市朴读,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌惰说,老刑警劉巖磨德,帶你破解...
    沈念sama閱讀 216,692評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異吆视,居然都是意外死亡典挑,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)啦吧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)您觉,“玉大人,你說(shuō)我怎么就攤上這事授滓×账” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,995評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵般堆,是天一觀的道長(zhǎng)在孝。 經(jīng)常有香客問(wèn)我,道長(zhǎng)淮摔,這世上最難降的妖魔是什么私沮? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,223評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮和橙,結(jié)果婚禮上仔燕,老公的妹妹穿的比我還像新娘。我一直安慰自己魔招,他們只是感情好晰搀,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,245評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著办斑,像睡著了一般外恕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上乡翅,一...
    開(kāi)封第一講書(shū)人閱讀 51,208評(píng)論 1 299
  • 那天吁讨,我揣著相機(jī)與錄音,去河邊找鬼峦朗。 笑死,一個(gè)胖子當(dāng)著我的面吹牛排龄,可吹牛的內(nèi)容都是我干的波势。 我是一名探鬼主播翎朱,決...
    沈念sama閱讀 40,091評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼尺铣!你這毒婦竟也來(lái)了拴曲?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,929評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤凛忿,失蹤者是張志新(化名)和其女友劉穎澈灼,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體店溢,經(jīng)...
    沈念sama閱讀 45,346評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡叁熔,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,570評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了床牧。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片荣回。...
    茶點(diǎn)故事閱讀 39,739評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖戈咳,靈堂內(nèi)的尸體忽然破棺而出心软,到底是詐尸還是另有隱情,我是刑警寧澤著蛙,帶...
    沈念sama閱讀 35,437評(píng)論 5 344
  • 正文 年R本政府宣布删铃,位于F島的核電站,受9級(jí)特大地震影響踏堡,放射性物質(zhì)發(fā)生泄漏猎唁。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,037評(píng)論 3 326
  • 文/蒙蒙 一暂吉、第九天 我趴在偏房一處隱蔽的房頂上張望胖秒。 院中可真熱鬧,春花似錦慕的、人聲如沸阎肝。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,677評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)风题。三九已至,卻和暖如春嫉父,著一層夾襖步出監(jiān)牢的瞬間沛硅,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,833評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工绕辖, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留摇肌,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,760評(píng)論 2 369
  • 正文 我出身青樓仪际,卻偏偏與公主長(zhǎng)得像围小,于是被迫代替她去往敵國(guó)和親昵骤。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,647評(píng)論 2 354

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