歡迎光臨
每天分享高質量文章

牆裂推薦 | 漫畫解讀Elasticsearch原理,看完你就懂

2019年度 ACOUG活動啟動啦!為了感恩和回饋一直支援社群工作的技術愛好者、會員、嘉賓和合作夥伴,2019年度,我們彙集了行業大咖最新的精彩主題跟大家分享,更有驚喜好禮等你拿,點選“我要報名”,立即參與!2019年,我們將探索更多可能。

本次活動我們邀請到了來自Oracle、雲和恩墨、Mellanox的專家,議題涵蓋故障解析、新架構、新功能。

有理論上的乾貨知識,更有動手實驗室,手把手教你使用Oracle APEX快速開發應用。

報名:2019 ACOUG China Tour 上海站

隨著央視詩詞大會的熱播,小史開始對詩詞感興趣,最喜歡的就是飛花令的環節。

但是由於小史很久沒有背過詩詞了,飛一個字很難說出一句,很多之前很熟悉的詩句也想不起來。

倒排索引

呂老師:但是我讓你說出帶“前”字的詩句,由於沒有索引,你只能遍歷腦海中所有詩詞,當你的腦海中詩詞量大的時候,就很難在短時間內得到結果了。

索引量爆炸

搜尋引擎原理

Elasticsearch 簡介

呂老師:但是 Lucene 還是一個庫,必須要懂一點搜尋引擎原理的人才能用的好,所以後來又有人基於 Lucene 進行封裝,寫出了 Elasticsearch。

Elasticsearch 基本概念

呂老師:型別是用來定義資料結構的,你可以認為是 MySQL 中的一張表。檔案就是最終的資料了,你可以認為一個檔案就是一條記錄。

呂老師:比如一首詩,有詩題、作者、朝代、字數、詩內容等欄位,那麼首先,我們可以建立一個名叫 Poems 的索引,然後建立一個名叫 Poem 的型別,型別是透過 Mapping 來定義每個欄位的型別。

比如詩題、作者、朝代都是 Keyword 型別,詩內容是 Text 型別,而字數是 Integer 型別,最後就是把資料組織成 Json 格式存放進去了。

呂老師:這個問題問得好,這涉及到分詞的問題,Keyword 型別是不會分詞的,直接根據字串內容建立反向索引,Text 型別在存入 Elasticsearch 的時候,會先分詞,然後根據分詞後的內容建立反向索引。

呂老師:之前我們說過,Elasticsearch 把操作都封裝成了 HTTP 的 API,我們只要給 Elasticsearch 傳送 HTTP 請求就行。

比如使用 curl -XPUT ‘http://ip:port/poems’,就能建立一個名為 Poems 的索引,其他操作也是類似的。

Elasticsearch 分散式原理

呂老師:沒錯,Elasticsearch 也是會對資料進行切分,同時每一個分片會儲存多個副本,其原因和 HDFS 是一樣的,都是為了保證分散式環境下的高可用。

呂老師:沒錯,在 Elasticsearch 中,節點是對等的,節點間會透過自己的一些規則選取叢集的 Master,Master 會負責叢集狀態資訊的改變,並同步給其他節點。

呂老師:註意,只有建立索引和型別需要經過 Master,資料的寫入有一個簡單的 Routing 規則,可以 Route 到叢集中的任意節點,所以資料寫入壓力是分散在整個叢集的。

ELK 系統

呂老師:其實很多公司都用 Elasticsearch 搭建 ELK 系統,也就是日誌分析系統。其中 E 就是 Elasticsearch,L 是 Logstash,是一個日誌收集系統,K 是 Kibana,是一個資料視覺化平臺。

呂老師:分析日誌的用處可大了,你想,假如一個分散式系統有 1000 臺機器,系統出現故障時,我要看下日誌,還得一臺一臺登入上去檢視,是不是非常麻煩?

呂老師:但是如果日誌接入了 ELK 系統就不一樣。比如系統執行過程中,突然出現了異常,在日誌中就能及時反饋,日誌進入 ELK 系統中,我們直接在 Kibana 就能看到日誌情況。如果再接入一些實時計算模組,還能做實時報警功能。

總結

小史學完了 Elasticsearch,在筆記本上寫下瞭如下記錄:

  • 反向索引又叫倒排索引,是根據文章內容中的關鍵字建立索引。

  • 搜尋引擎原理就是建立反向索引。

  • Elasticsearch 在 Lucene 的基礎上進行封裝,實現了分散式搜尋引擎。

  • Elasticsearch 中的索引、型別和檔案的概念比較重要,類似於 MySQL 中的資料庫、表和行。

  • Elasticsearch 也是 Master-slave 架構,也實現了資料的分片和備份。

  • Elasticsearch 一個典型應用就是 ELK 日誌分析系統。

寫完,又高高興興背詩去了。

 

來源:網際網路偵查公眾號

    已同步到看一看
    贊(0)

    分享創造快樂