前段時間,有一朋友咨詢我,說es的head插件一直安裝失敗,為了給朋友解惑,自己百度博文並實踐了一番,也的確踩了些坑,但我給爬了起來。今天就來分享下實踐心得並跳過的坑。
ElasticSearch 是一個分布式、高擴展、高實時的搜索與數據分析引擎,它能很方便的使大量數據具有搜索、分析和探索的能力,簡稱es。本文分五部分描述,es的安裝,head插件安裝,es的基本概念,es的基本使用,問題總結。
目錄
一、es安裝
安裝方式網絡上有很多,這里簡單說下步驟,具體實踐是很簡單的
①配置java環境
需要java環境,最好是較新的java環境,java環境的配置就略過了
②安裝elasticsearch
下載地址:https://www.elastic.co/cn/downloads/elasticsearch,最新版本已是7.2.0。下載后,解壓到任意目錄,我的路徑是:D:\elasticsearch-7.2.0
③啟動elasticsearch

es的默認端口是9200,在瀏覽器打開網址:localhost:9200,出現如下截圖,則說明es已經安裝成功了
es的安裝是不是很簡單?接下來來安裝head插件
二、head插件安裝
1.安裝node
es5以上就需要安裝node和grunt,所以安裝head插件的前提,是需要把該兩項配置好。
node下載地址:https://nodejs.org/en/download/,下載對應環境的node版本安裝即可,安裝步驟略過了。
安裝過程結束后,在dos窗口查看是否安裝成功,使用命令:node -v,出現如下截圖,則說明安裝成功。
2.安裝grunt
在node安裝路徑下,使用命令安裝:npm install -g grunt-cli 安裝grunt。
安裝結束后,使用命令grunt -version查看是否安裝成功,出現如下截圖,說明安裝成功。
3.安裝head插件
①下載head插件
下載地址:https://github.com/mobz/elasticsearch-head,下載zip包
②解壓zip包
我的解壓路徑:D:\elasticsearch-7.2.0\elasticsearch-head-master
③安裝pathomjs
在dos窗口進入到head路徑下,使用命令npm install安裝pathomjs
④啟用服務
使用命令npm start啟用服務,出現如下截圖,則說明服務啟動成功
4.瀏覽器中訪問
使用地址:localhost:9100訪問,出現如下截圖,則說明head安裝成功,默認端口是9100
es和head插件都已安裝成功,接下來介紹下es的基本概念及基本使用。
三、es的基本概念
①集群和節點
一個es集群是由一個或多和es節點組成的集合,每一個集群都有一個名字,每個節點都有自己的名字,節點是可以存儲數據, 參與索引數據的獨立服務。
②索引(類似於數據庫里面的database)
索引是含有相同屬性的文檔集合,索引在es中是通過一個名字來識別的,必須是英文字母小寫,且不含中划線。
③類型(相當於sql中的table)
一個索引可以定義一個或多個類型,文檔必須屬於一個類型
④文檔(相當於sql中的一行記錄)
文檔是可以被索引的基本數據單位
⑤分片
每個索引都有多個分片,每個分片都是一個luncene索引,分片的好處:分攤索引的搜索壓力,分片還支持水平的拓展和拆分以及分布式的操作,可以提高搜索和其他處理的效率。
⑥備份
拷貝一個分片就完成了分片的備份,備份的好處:當主分片失敗或者掛掉,備份就可以代替分片進行操作,進而提高了es的可用性,備份的分片還可以進行搜索操作,以分攤搜索的壓力。es在創建索引時,默認創建5個分片,一份備份,可以修改,分片的數量只能在創建索引的時候指定,索引創建后就不能修改分片的數量了,而備份是可以動態修改的。
⑦數據類型
四、es基本使用
1.es基本格式
2.創建索引
在head插件中創建,操作如下:
點擊索引>新建索引
彈出該提示,則說明創建成功
3.查看索引信息
點擊概覽查看創建情況
創建索引分為: 結構化創建與非結構化創建
查看索引是否是結構化的方法:點擊剛創建的索引信息,可查看到如下所示信息:
Mappings是結構化的一個關鍵詞,其后內容是空的,說明這個索引是一個非結構化的索引。
4.創建結構化索引
點擊head插件的“復合查詢”,輸入內容如下:
勾選易讀,點擊驗證json,可以檢測json格式是否正確
請求方式選擇post,點擊提交請求,返回如下截圖數據,則表示創建成功
創建成功后,可以返回到概覽中查看索引信息,如下:
也可以直接在復合查詢中,改成get請求方式,提交請求,查看數據:
5.數據插入
文檔id, 唯一索引值, 指向文檔數據
①指定文檔id插入
使用http中的put方法,插入時輸入的ip地址,http://localhost:9200/test/_doc/1
請求參數依次為:索引名稱/類型名稱/文檔id
請求參數
{
"duty": "技術",
"age": 22,
"name": "一壺清酒",
"date": "2019-07-21 11:00:00"
}
如下圖所示:
在數據瀏覽中可查看到該條數據,如下所示:
②自動產生文檔id插入
使用http中的post方法,插入時輸入的ip地址:http://localhost:9200/test/_doc
請求參數
{
"duty": "測試",
"age": 25,
"name": "溫一壺清酒",
"date": "2019-07-21 11:05:00"
}
依然到數據瀏覽中查看數據,如下所示,id為自動生成:
③postman插入數據
操作方式一樣,只是改成了postman而已,入參如下所示:
到數據瀏覽處查看數據,如下:
postman的操作,就只引用了這一個例子,其他操作都一樣,所以就不再贅述。
6.修改文檔數據
①直接修改文檔
http方法: post方法
請求地址:
http://localhost:9200/test/_doc/1/_update
請求參數
{
"doc": {
"duty": "技術",
"age": 22,
"name": "我是一壺清酒",
"date": "2019-07-21 11:06:00"
}
}
關鍵詞: _update,doc
“doc”為關鍵字,要修改的文檔放在doc中, 實例修改了type為test索引下_doc中id為1 的name和date屬性
到數據瀏覽處查看修改后的數據,如下:
②腳本修改文檔
通過腳本修改的api格式與直接修改的是一致的
http方法: post方法
請求地址:
http://localhost:9200/test/_doc/1/_update
請求參數
{
"script": {
"lang": "painless",
"inline": "ctx._source.age += 30"
}
}
關鍵字”script”: 標志以腳本的方式修改文檔
“lang”:表示以何種腳本語言進行修改,“painless”表示以es內置的腳本語言進行修改。此外es還支持多種腳本語言,如Python,js等等
“inline”:指定腳本內容 “ctx”代表es上下文,_source 代表文檔
查看數據,age增加了5,如下所示:
7.刪除文檔
http方法: delete
請求地址:
http://localhost:9200/test/_doc/1
操作如下:
到數據瀏覽處查看數據,已沒有id為1的文檔了,如下所示:
8.刪除索引
①索引概覽中刪除
點擊已有索引的動作,會有個刪除操作,如下:
輸入刪除,點擊確定,該索引就被刪除了,會返回一個true的提示框
再次查看,就只有一個索引了
②通過api刪除
http方法: delete
請求地址:
http://localhost:9200/demo
五、問題總結
1.grunt不是內部或外部命令
使用命令npm start啟用服務時,報grunt不是內部或外部命令,如下所示:
解決辦法:
將node安裝路徑,加到環境變量path路徑下,重啟dos窗口即可。
2.head服務啟用失敗
使用npm start命令啟用服務,報錯如下:
解決辦法:
3.提示未連接
head服務啟用成功,通過localhost:9100訪問,提示集群健康值:未連接
解決辦法:
需要在elasticsearch.yml文件中增加以下配置:
http.cors.enabled: true
http.cors.allow-origin: "*"
說明:
http.cors.enabled:true 如果啟用了 HTTP 端口,那么此屬性會指定是否允許跨源 REST 請求。
http.cors.allowed.origin:"*" 如果 http.cors.enabled 的值為 true,那么該屬性會指定允許 REST 請求來自何處。
重啟服務,再次訪問,則恢復正常
小結
全文通讀到此,發現ElasticSearch的安裝、head插件的安裝其實很簡單,並不是那么難。es的使用,就需要學習些基本的概念,知識的海洋是淵博的,此次介紹的es的使用,也只是簡單的增刪改查,屬於很淺薄的知識。自己在摸索的時候,也是一點一點學習,百度以前前輩們的博文學習、摸索。只要努力,遇到問題,積極去解決,我相信一定會成功。文中觀點,有誤之處,歡迎批評指正