關於ES的學習要點

2021-09-26 14:25:41 字數 3640 閱讀 1655

es的原理

1、介紹

elasticsearch 是乙個分布式可擴充套件的實時搜尋和分析引擎,乙個建立在全文搜尋引擎 apache lucene(tm) 基礎上的搜尋引擎.當然 elasticsearch 並不僅僅是 lucene 那麼簡單,它不僅包括了全文搜尋功能,還可以進行以下工作:

2、基本概念

elasticsearch是面向文件型資料庫,一條資料在這裡就是乙個文件,用json作為文件序列化的格式。

用mysql這樣的資料庫儲存就會容易想到建立一張user表,有balabala的字段等,在elasticsearch裡這就是乙個文件,當然這個文件會屬於乙個user的型別,各種各樣的型別存在於乙個索引當中。這裡有乙份簡易的將elasticsearch和關係型資料術語對照表: 

關聯式資料庫     ⇒ 資料庫 ⇒ 表    ⇒ 行    ⇒ 列(columns)

elasticsearch ⇒ 索引(index) ⇒ 型別(type) ⇒ 文件(docments) ⇒ 字段(fields)

3、索引elasticsearch索引的精髓:

一切設計都是為了提高搜尋的效能

傳統關係型資料庫用的索引方式是b-tree,用樹型結構儲存索引,能同時兼顧插入和查詢的效能。

為了提高查詢的效率,減少磁碟尋道次數,將多個值作為乙個陣列通過連續區間存放,一次尋道讀取多個資料,同時也降低樹的高度。

es用的是倒排索引

傳統資料庫根據索引查資料的時候,資料庫把索引排序儲存,然後磁碟根據範圍去尋找對應的資料

es是把索引和索引對應的資料id儲存起來,然後建立起索引字典樹,存到記憶體裡,根據給的索引值,在字典裡面查詢到對應的索引,獲取資料id然後再獲取資料

elasticsearch的索引思路:

將磁碟裡的東西盡量搬進記憶體,減少磁碟隨機讀取次數(同時也利用磁碟順序讀特性),結合壓縮演算法使用記憶體。

講解的比較詳細的文章 

es安裝

集群部署就是重複上面的步驟,除了配置檔案要改,其他都一樣

配置檔案修改

es的配置檔案在config資料夾裡,檔名叫做elasticsearch.yml,預設配置比較全面,下面主要列出幾點要關注的配置:

2、node.name: node-1 當前節點的名字,每台伺服器裡的es都要配置,最好不一樣,不配置的話,每次啟動都會隨機生成乙個名字,你就要去把節點名字和伺服器對應起來,下次啟動又會變,必須要配

3、node.attr.rack: r1 類似於資料庫裡面的唯一資料id,集群裡面的節點配置都要不一樣

4、node.master: true 當前節點有成為主節點的資格。es是對外無主節點,對內有主節點,主節點是集群裡面自動從有資格的節點裡面選舉出來的 預設配置就是true

5、node.data: true 當前節點可以儲存資料,預設配置就是true

6、path.data: /path/to/data  儲存資料檔案的路徑,這個配置到伺服器的其他資料夾,別放在es資料夾裡,不然以後重灌es的時候資料就會沒了。最好配置多個資料夾路徑,如果將每個目錄分別掛載不同的硬碟,這可是乙個簡單且高效實現乙個軟磁碟陣列( raid 0 )的辦法。elasticsearch 會自動把條帶化(注:raid 0 又稱為 stripe(條帶化),在磁碟陣列中,資料是以條帶的方式貫穿在磁碟陣列所有硬碟中的) 資料分隔到不同的目錄,以便提高效能。

7、path.logs: /path/to/logs  日誌檔案的存放路徑,配置到安裝目錄之外的資料夾

9、network.host: 192.168.0.110   配置當前節點所在的伺服器ip

10、http.port: 9200  配置當前服務所用的ip埠

11、discovery.zen.ping.unicast.hosts: ["host1", "host2"]  配置集群其他節點伺服器的ip和埠,意思就是通過這個,當前節點會告訴你配置的兩個節點伺服器,當前節點是活著的

12、discovery.zen.minimum_master_nodes: 3minimum_master_nodes設定對你的集群的穩定 極其 重要,用於控制選舉行為發生的最小集群節點數量

13、gateway.recover_after_nodes: 8 這個設定就是用來規定,10個節點裡最少啟動8個,剩下的2個沒啟動就開始複製資料,限制了最低的節點啟動個數

14、gateway.expected_nodes: 10 這個配置就是告訴集群,這個集群的節點數總共是幾個

15、gateway.recover_after_time: 5m 這個配置就是說,如果集群啟動個數達到了最低要求,集群還會等那些沒啟動的節點5分鐘,5分鐘後還沒啟動就認為那些節點已經不能用了,就會啟動分片複製等操作了

16、action.destructive_requires_name: true  設定是否可以通過正則或者_all刪除或者關閉索引庫,預設true表示必須需要顯式指定索引庫名稱。生產環境建議設定為true,刪除索引庫的時候必須顯式指定,否則可能會誤刪索引庫中的索引庫。

17、# 安裝header外掛程式時的必要引數:

es的配置就到這裡差不多了,還有很多配置是涉及到es優化的,大家可以去網上找下。當伺服器的es集群部署好之後,剩下的就是在**中如何去使用es了。

我用的是spring boot框架,導包用的是gradle,下面就是怎麼把es整合到框架中

1、導包

compile group: 'org.elasticsearch.client', name: 'transport', version: '5.5.2'

compile group:'org.apache.logging.log4j',name:'log4j-core',version:'2.10.0'

client包是用來連線es,下面這個log4j,我查過es,他裡面帶的日誌就是log4j,但是我的專案裡面用的是slf4j,所以要重新匯入,這個時候兩種日誌會出現日誌衝突問題,可能本地還好,但是伺服器上專案就啟動不了,這就要根據各自專案進行修改

2、建立連線es的config檔案

@configuration

public class esconfig catch (exception e)

return null;}}

友情提示,埠用的是9300,

9200作為http協議,主要用於外部通訊

9300作為tcp協議,jar之間就是通過tcp協議通訊

es集群之間是通過9300進行通訊。

我這裡沒配集群,只用了乙個節點,當使用集群的時候,就要使用動態**

3、使用es進行增刪改

public void getgradelist(mmessage message) throws exception

es學習差不多就這樣了,剩下的就是實踐了

關於es6 import export的學習隨筆

記得之前的一次面試中,有個面試官問了我關於es6匯入和匯出的一些知識點,可惜當時對這方面沒在意,只知道每次機械的import和export,也不知道為啥要這樣用,現在靜下心來,好好的把這塊看了下,順便把自己的學習內容記錄下來,方便將來的時候翻閱。es6模組主要是由export和import組成。乙個...

關於es的No Node Exception異常

在使用es進行導資料時,總是是不是的發生no node exception,現在在此總結一下發生no node 的情況。如下情況極有可能發生no node exception 1 客戶端與伺服器es版本不一致。2 es伺服器ip指定錯誤或者es伺服器已停止服務。3 es伺服器端口指定錯誤。4 伺服器...

關於es6的整理和學習

1 const 定義常量 無法更改 但如果事物件可以更改內部屬性 例如 const a let a.aa 2可以更改 2 var 函式作用域 let 塊狀作用域 3 模板字串 let a i let b love console.log you 4 函式擴充套件 4.1 引數預設值 原始寫法 fun...