終於有人把Elasticsearch原理講透了!
小史是一個非科班的程序員,雖然學的是電子專業,可是經過本身的努力成功經過了面試,如今要開始迎接新生活了。程序員
小史是一個非科班的程序員,雖然學的是電子專業,可是經過本身的努力成功經過了面試,如今要開始迎接新生活了。面試
隨着央視詩詞大會的熱播,小史開始對詩詞感興趣,最喜歡的就是飛花令的環節數據庫
可是因爲小史好久沒有背過詩詞了,飛一個字很難說出一句,不少以前很熟悉的詩句也想不起來。數據結構
倒排索引架構
呂老師:可是我讓你說出帶「前」字的詩句,因爲沒有索引,你只能遍歷腦海中全部詩詞,當你的腦海中詩詞量大的時候,就很難在短期內獲得結果了。app
索引量爆炸curl
搜索引擎原理分佈式
Elasticsearch 簡介搜索引擎
呂老師:可是 Lucene 仍是一個庫,必需要懂一點搜索引擎原理的人才能用的好,因此後來又有人基於 Lucene 進行封裝,寫出了 Elasticsearch。url
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 日誌分析系統。
寫完,又高高興興背詩去了。
觀書有感(朱熹)
半畝方塘一鑑開,天光雲影共徘徊。
問渠那得清如許?爲有源頭活水來。