1. 程式人生 > 其它 >elasticsearch倒排索引(全面瞭解)

elasticsearch倒排索引(全面瞭解)

SimpleAI推薦語:

前年轉過這篇文章,最近在看檢索相關論文,發現又有點忘記倒排索引(inverted index)的具體內容,遂翻出來再看看,不得不說,這個漫畫畫的太好了,娓娓道來,一看就懂,再次分享給大家!

小史是一個非科班的程式設計師,雖然學的是電子專業,但是通過自己的努力成功通過了面試,現在要開始迎接新生活了。

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

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

【倒排索引】

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

【索引量爆炸】

【搜尋引擎原理】

【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,在筆記本上寫下了如下記錄:

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

2、搜尋引擎原理就是建立反向索引

3、elasticsearch在lucene的基礎上進行封裝,實現了分散式搜尋引擎

4、elasticsearch中的索引、型別和文件的概念比較重要,類似於mysql中的資料庫、表和行

5、elasticsearch也是master-slave架構,也實現了資料的分片和備份

6、elasticsearch一個典型應用就是elk日誌分析系統

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

觀書有感

朱熹

半畝方塘一鑑開,天光雲影共徘徊。

問渠那得清如許?為有源頭活水來。

其他原創好文

  免責宣告:本文來自騰訊新聞客戶端創作者,不代表騰訊網的觀點和立場。