ES資料庫架構

mcxiaoracle發表於2022-06-26

  資料可以分為結構化資料和非結構化資料,比如說我們常用的sql語句就都是操作結構化資料,郵件等資訊都是非結構化資料;

    對於結構化資料的查詢可以使用sql語句進行查詢,速度較快;


    對於非結構化資料的查詢可以把非結構化資料變成結構化資料:先根據空格進行字串拆分,得到一個基礎的單詞列表。需要去掉標點符號、轉換大小寫、去除停用詞、重複的單詞只記錄一次,就得到了一個最終的單詞列表。然後基於單詞列表建立一個索引。查詢時直接查詢索引,找到關鍵詞後根據關鍵詞和文件的對應關係,找到文件列表。這個過程就是全文檢索的過程。

全文檢索技術有:

    Lucene:使用該技術需要對Lucene的API和底層架構非常瞭解,而且需要編寫大量的JAVA程式碼

    Solr:使用JAVA實現一個web應用,可以使用rest方式的http請求,程式遠端API呼叫

    ElasticSearch(ES):可以使用rest方式的http請求,進行遠端API呼叫

ElasticSearch是一款開源的高擴充套件分散式全文檢索引擎。其是使用JAVA開發並使用Lucene作為核心來實現所有索引和搜尋功能的。

    ES與Lucene對比:ES透過簡單的Restful API來隱藏Lucene的複雜性,從而讓全文檢索變得簡單。

    ES與Solr對比:Solr是透過ZK進行分散式管理的,而ES自身帶的有分散式協調管理功能;Solr支援更多格式的資料,ES只支援Json格式的資料;Solr在傳統搜尋應用中表現好於ES,但是在處理實時搜尋應用時效率明顯低於ES,因為Solr建立索引時,會產生IO阻塞。

  ES不僅僅是儲存,還會索引整個文件的內容讓其可以進行搜尋,在ES中,可以對文件進行索引、搜尋、排序、過濾等操作。

  ES的概念有索引index、型別type、文件document、欄位field和對映mapping

1、索引index

    索引可以看作是MySQL中的資料庫,一套資料可以使用一套索引。

    一個索引由一個名字來標識,名字必須全部是小寫字母,當我們對這個索引中文件進行索引、搜尋、更新和刪除的時候,都需要使用這個名字。

2、型別type

    型別類似與MySQL中的表,在一個索引中可以建立多個type。這個在es7及以後已經被廢棄,只有_doc。

3、文件document

    文件類似MySQL中的一條資料,儲存的是具體的資料,儲存格式為Json

4、欄位field

    相當於MySQL中的欄位。

  5、對映mapping

    mapping對處理資料方式和規則做的一些限制,如某個欄位的資料型別、預設值、分析器、是否被索引等




ES資料庫架構



   ES的架構總體如上圖所示,從下到上分為閘道器、搜尋引擎、四大元件、自動發現、通訊和Restful API



1、Gateway閘道器

    其作用是用來對資料進行持久化以及ES重啟後重新恢復資料。

    es支援多種型別的gateway,有本地檔案系統、分散式檔案系統、Hadoop的HDFS等。

    其儲存的資訊包括索引資訊、叢集資訊、mapping等




 2、districted lucene directory搜尋引擎

    Gateway上層就是Lucene的分散式檢索框架。

    ES是分散式的搜尋引擎,雖然底層用的是Lucene,但是需要在每個節點上都執行Lucene進行相應的索引、查詢、更新等操作,所以需要做成一個分散式的執行框架來滿足業務需要。




 3、四大元件模組

    districted lucene directory之上就是ES的四大模組。

    Index Model:索引模組,對資料建立索引(通常是建立倒排索引)

    Seacher Model:搜尋模組,就是對資料進行查詢搜尋

    Mapping Model:是資料對映與解析模組,資料的每個欄位可以根據建立的表結構透過mapping進行對映解析;如果沒有建立表結構,那麼ES會根據資料型別來推測資料結構,並自動生成一個mapping,然後根據mapping進行解析

    River Model:在es2.0之後被取消了,表示可以使用外掛處理。例如可以透過一些自定義指令碼將傳統資料庫的資料實時同步到es中。

  4、自動發現Discovery Script

    es叢集中各個節點透過discovery相互發現的,預設使用的是Zen。es是一個基於p2p的系統,他先透過廣播尋找存在的節點,再透過多播協議來進行節點之間的通訊,同時也支援點對點的互動。

    es還可以支援多種script指令碼語言,例如mvel、js、python等。



5、通訊(Transport)

    代表es內部節點或叢集與客戶的互動方式,預設內部使用tcp協議進行互動,同時其還支援http協議,thrift、servlet、memcached、zeroMQ等通訊協議。

    節點間通訊埠預設9300-9400

  6、Restful介面

    最上層就是ES暴漏給我們的訪問介面。





其中VERB是請求方式(post、get....),PROTOCOL是協議(http、https......),HOST和PORT是es的ip和埠,PATH是API的終端路徑,QUERY_STRING表示任何可選的查詢字串引數(例如@pertty將格式化的輸出JSON格式),BODY是一個Json格式的請求體。




{

    "settings":{

        "index":{

            "number_of_shards":"5",

            "number_of_replicas":"1"

        }

    },

    "mappings":{

        "_doc":{

            "properties":{

                "orderId":{

                    "type":"long",

                    "store":true,

                    "index":true

                },

                "orderName":{

                    "type":"text",

                    "store":true,

                    "index":true,

                    "analyzer":"standard"

                },

                "content":{

                    "type":"text",

                    "store":true,

                    "index":true,

                    "analyzer":"standard"

                }

            }

        }

    }

}





五、IK分詞器和ElasticScher整合使用




  訪問IK分詞器檢視分詞效果:post  ip:9200/_analyze,裡面只需要傳入analyzer和text,其中text為測試分詞的文字,analyzer在IK分詞器中有ik_smart和ik_max_word兩種,分別是最少切分和最細力度切分。



推薦閱讀:

https://www.cnblogs.com/liconglong/p/15010606.html

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69949806/viewspace-2902826/,如需轉載,請註明出處,否則將追究法律責任。

相關文章