ES資料庫架構
資料可以分為結構化資料和非結構化資料,比如說我們常用的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的架構總體如上圖所示,從下到上分為閘道器、搜尋引擎、四大元件、自動發現、通訊和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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- NUMA 架構與 資料庫架構資料庫
- Greenplum資料庫系統架構資料庫架構
- 主流資料庫架構設計資料庫架構
- 資料湖+資料倉儲 = 資料湖庫架構架構
- 資料庫系統架構討論資料庫架構
- 架構與資料庫的關係架構資料庫
- mysql資料庫的基礎架構MySql資料庫架構
- 架構之路(五):忘記資料庫架構資料庫
- 58同城資料庫架構學習資料庫架構
- 架構之:資料流架構架構
- 按照業務領域畫資料架構圖 業務架構 資料架構架構
- 崑崙分散式資料庫架構介紹分散式資料庫架構
- MySQL資料庫架構——高可用演進MySql資料庫架構
- 資料庫 Mysql 邏輯架構簡介資料庫MySql架構
- 故事篇:資料庫架構演變之路資料庫架構
- 架構設計(二):資料庫複製架構資料庫
- 鬥魚資料庫混合雲架構實踐資料庫架構
- 分散式資料庫架構原理 - Alex Petrov分散式資料庫架構
- MonetDB列存資料庫架構初探資料庫架構
- Schemaless架構(二):Uber的Trip資料庫架構資料庫
- 【虹科乾貨】Lambda資料架構和Kappa資料架構——構建現代資料架構架構APP
- ES資料庫高可用配置資料庫
- 網際網路資料庫架構設計資料庫架構
- 幽默:沒有資料庫的架構來了資料庫架構
- 分散式資料庫的架構演變之路分散式資料庫架構
- 資料庫設計---即資料庫架構設計的幾個步驟資料庫架構
- ES 架構及基礎 - 1架構
- ES6 Map 資料結構資料結構
- ES6 Set 資料結構資料結構
- Saas模式資料庫層資料架構以及資料刪除處理 (轉)模式資料庫架構
- 熱璞資料庫HotDB 基礎架構詳解資料庫架構
- 一個資料庫儲存架構的獨白資料庫架構
- 淘寶海量資料庫OceanBase系統架構資料庫架構
- 沈劍:58同城資料庫架構最佳實踐資料庫架構
- 資料庫架構和物件、定義資料完整性-SQL Server資料庫架構物件SQLServer
- 雲資料庫時代:企業資料架構的雲化智慧重構和變革資料庫架構
- 大資料架構師大資料架構
- 面向資料的架構架構