1. 程式人生 > >【ElasticSearch】(一)初識ES

【ElasticSearch】(一)初識ES

       接觸ElasticSearch一段時間了,前期調研、專案接入、資料同步、列表查詢這些階段都已經經歷了,但是ES在腦海中的整體映像還是模模糊糊,做個梳理,認真地思考一下ElasticSearch中模糊的思維。

       前提:

       如圖,是從github上學習到了,巨集觀總結階段的流程化思考,很科學的學習習慣,我按照這個思路來總結下目前階段我理解到的ElasticSearch.

它是什麼

1.術語定義

      ElasticSearch是一個基於Lucene的搜尋伺服器。它提供了一個分散式多使用者能力的全文搜尋引擎,基於RESTful web介面。Elasticsearch是用Java開發的,並作為Apache許可條款下的開放原始碼釋出,是當前流行的企業級搜尋引擎。設計用於雲端計算中,能夠達到實時搜尋,穩定,可靠,快速,安裝使用方便。
      官網:https://www.elastic.co/products/elasticsearch 
      百度百科:https://baike.baidu.com/item/elasticsearch/3411206?fr=aladdin 

2.它的歷史
      出現原因:

https://www.jianshu.com/p/3d43616999d9 (一個做菜譜的故事)
      歷史版本:https://www.elastic.co/guide/en/elasticsearch/reference/current/setup-upgrade.html(每個版本節點,做了哪些事情,有助於排解使用中的問題)
        
3.構架

    

      如圖所示,是ES的整體架構,從下往上說:
      1.Gateway是es用於儲存索引的檔案系統,支援多種檔案型別,如圖所示。
      2.Gateway往上就是分散式的Lucene框架,ES底層的API是由這一層提供的,每個節點都有一個Lucene引擎的支援。
      3.Lucene往上是Elasticsearch的模組,包括索引模組、搜尋模組、對映解析模組等。River相當於第三方外掛,用來匯入第三方資料來源,在2.x之後不再使用。
      4.ES模組之上是Discovery、Scripting和第三方外掛。Discovery是ES的節點發現模組,不同機器上的ES節點要組成叢集需要訊息通訊,叢集內部選主master都是通過Discovery來做。Scripting用來支援JavaScript、Python等多語言,可以在查詢語句中嵌入。
      5.再往上是傳輸模組和JMX。傳輸模組支援Thrift、Memcached、HTTP,預設HTTP傳輸。JMX是java的管理框架。
      6.再往上是ES提供給使用者的介面,通過RESTful API和ES叢集進行互動。

4.核心概念
      1.叢集
      代表一個叢集,叢集中有多個節點,其中有一個為主節點,這個主節點是可以通過選舉產生的,主從節點是對於叢集內部來說的。es的一個概念就是去中心化,字面上理解就是無中心節點,這是對於叢集外部來說的,因為從外部來看es叢集,在邏輯上是個整體,你與任何一個節點的通訊和與整個es叢集通訊是等價的。

      2.節點
      一個節點是叢集中的一個伺服器,對於節點,最好採用被動加入的方式,不然容易產生“腦裂”現象。

      3.索引4.型別 5.文件

      這三個概念,參考與關係型DB的對比:

     

      6.分片
      es可以把一個完整的索引分成多個分片,這樣的好處是可以把一個大的索引拆分成多個,分佈到不同的節點上。構成分散式搜尋。分片的數量只能在索引建立前指定,並且索引建立後不能更改。

      7.副本
      es可以設定多個索引的副本,副本的作用一是提高系統的容錯性,當某個節點某個分片損壞或丟失時可以從副本中恢復。二是提高es的查詢效率,es會自動對搜尋請求進行負載均衡。


4.應用場景
     1.站內搜尋
     用在網頁資訊量很大的網站,百度、github、stackoverflow,全文檢索的功能,方便使用者快速檢索資料資訊。
     2.NoSQL資料庫
     Elasticsearch讀寫效能優於MongoDB,支援地理位置查詢。
     3.日誌分析
     日誌分析由實時日誌分析平臺ELK(Elasticsearch、Logstash、Kiabana)完成,能夠對日誌進行集中的收集、儲存、搜尋、分析、監控以及視覺化。

5.同類常見技術
      Solr(全文搜尋)對比es:

https://blog.csdn.net/vv8086/article/details/74452178 
      Splunk(全文搜尋、大資料搜尋) 對比es:https://blog.csdn.net/github_39335046/article/details/73835390 

   

       從趨勢上可見,近幾年ES的排名也是越來靠前。

學習前提、依賴
       RESTful API的使用
       JSON資料結構的瞭解。

為什麼會出現
     1.分散式
     2.全文檢索
     3.近實時搜尋和分析
     4.高可用
     5.模式自有
     6.RESTful API
     從這幾個角度看,這似乎是es的優點,隨著現在網際網路專案的資料量越來越大,這恰恰是為什麼es能越來越火的原因啊。

缺陷
      換了好幾個負面的關鍵詞去搜索,拋開技術實現,從選型的角度,相比較solr,沒有什麼缺陷。像“深度分頁”這種的,完全可以在使用的時候避免,官網給了很好的解決方案:Scroll以及from/size等方法。


歸納整理並分享
      1.官網的Getting Started絕對是最快、最好的學習方式;
      2.安裝時候,通過HEAD外掛,或者googl瀏覽器的sense外掛,自己敲一敲,多動手;

      elasticsearch輔助:
      1.head外掛
      2.Kiabana

 

 腦圖總結

 1.概述;2.應用;3.原理;4.QA