這篇教程主要是對在入門的elasticsearch的一個記錄。node
基於 Dokcer ,單機安裝 Docker 版集羣。使用版本以下:git
整個安裝步驟分紅三部分:github
安裝過程當中鏡像拉取事件過長,這裏筆者將docker鏡像上傳到阿里的docker倉庫中。web
安裝 ES 集羣實例 elasticsearch001:spring
docker run -d -p 9200:9200 \ -p 9300:9300 \ --name elasticsearch001 -h elasticsearch001 \ -e cluster.name=lookout-es \ -e ES_JAVA_OPTS="-Xms512m -Xmx512m" \ -e xpack.security.enabled=false \ registry.cn-hangzhou.aliyuncs.com/dingwenjiang/elasticsearch:5.3.2
命令解釋以下:docker
docker run
: 會啓動一個容器實例,若是本地沒有對應的鏡像會去遠程registry上先下載鏡像。-d
: 表示容器運行在後臺-p [宿主機端口]:[容器內端口]
: 好比-p 9200:9200
表示把宿主機的9200端口映射到容器的9200端口--name
: 設置容器別名-h
: 指定容器的hostname-e
: 設置環境變量。這裏關閉 x-pack 的安全校驗功能,防止訪問認證。經過curl http://localhost:9200/_cat/health?v=pretty
來驗證elasticsearch001是否啓動成功,以下:
設置環境變量的時候,咱們指定了-e cluster.name=lookout-es
,用於後續關聯集羣用。node爲1 表示只有一個實例。默認 shards 分片爲主備兩個。status 狀態是咱們要關心的,狀態多是下列三個值之一:編程
也能夠訪問 http://localhost:9200/ ,能夠看到成功運行的案例,返回的 JSON 頁面。如圖:json
繼續搭建elasticsearch002:api
docker run -d -p 9211:9200 \ -p 9311:9300 --link elasticsearch001 \ --name elasticsearch002 \ -e cluster.name=lookout-es \ -e ES_JAVA_OPTS="-Xms512m -Xmx512m" \ -e xpack.security.enabled=false \ -e discovery.zen.ping.unicast.hosts=elasticsearch001 \ registry.cn-hangzhou.aliyuncs.com/dingwenjiang/elasticsearch:5.3.2
啓動elasticsearch002的時候增長了幾個參數,安全
--link [其餘容器名]:[在該容器中的別名]
: 添加連接到另外一個容器, 在本容器 hosts 文件中加入關聯容器的記錄。-e
: 設置環境變量。這裏額外指定了 ES 集羣的 cluster.name、ES 集羣節點淡泊配置 discovery.zen.ping.unicast.hosts 設置爲實例 elasticsearch001。再次執行curl http://localhost:9200/_cat/health?v=pretty
,結果如圖:
對比上面檢查數值能夠看出,首先集羣狀態爲 green , 全部的主分片和副本分片都已分配。你的集羣是 100% 可用的。相應的 node 、shards 都增長。
接着安裝Kibana,對elasticsearch進行監控,安裝命令以下:
# 啓動kibana docker run -d --name kibana001 \ --link elasticsearch001 \ -e ELASTICSEARCH_URL=http://elasticsearch001:9200 \ -p 5601:5601\ registry.cn-hangzhou.aliyuncs.com/dingwenjiang/kibana:5.3.2
其中-e 設置環境變量。這裏額外指定了 ELASTICSEARCH_URL 爲搜索實例地址。打開網頁訪問 127.0.0.1:5601,默認帳號爲 elasti,密碼爲 changeme。會出現以下的截圖:
這裏只是簡單整合下,開發一個web接口,實現數據存儲以及查詢功能。開發的思路仍是傳統的三層架構,controller、service、dao,這裏利用spring data來簡化對es的curd操做。
項目的repo地址:https://github.com/warjiang/d...
整個項目的結構以下所示:
入口文件爲:Application類,其中也是你們熟悉的spring-boot的用法。
controller主要在api包下,這裏會暴露出兩個API接口,分別是/api/contents
用於寫入內容、/api/content/search
用於查詢
service主要在service包下,與controller對應,須要實現寫入和查詢兩個方法
dao主要在repository包下,繼承ElasticsearchRepository,實現curd。
這裏須要注意的時候,讀寫的bean用的是entity包下的ContentEntity,實際上services中操做的的bean是bean包下的ContentBean。
後續具體的實如今這裏再也不贅述。
項目運行起來後,能夠發送寫入和查詢的請求來測試功能的正確性。
寫入請求:能夠經過curl 或者postman構造一個請求以下:
POST /api/contents HTTP/1.1 Host: 127.0.0.1:8080 Content-Type: application/json Cache-Control: no-cache [ { "id":1, "title":"《見識》", "content":"摩根說:任意讓小錢從身邊溜走的人,必定留不住大錢", "type":1, "category":"文學", "read":999, "support":100 }, { "id":2, "title":"《態度》", "content":"人類的幸福不是來自偶然的幸運,而是來自天天的小恩惠", "type":2, "category":"文學", "read":888, "support":88 }, { "id":3, "title":"《Java 編程思想》", "content":"Java 是世界上最diao的語言", "type":2, "category":"計算", "read":999, "support":100 } ]
請求成功會返回以下所示:
{ "code": 0, "message": "success", "data": true }
寫入成功後能夠到kibana中查看寫入結果,打開網頁訪問 localhost:5601,在 Kibana 監控中輸入須要監控的 index name 爲 content
。以下圖,取消打鉤,而後進入:
進入後,會獲得如圖所示的界面,裏面羅列了該索引 content 下面全部字段:
打開左側 Discover 欄目,便可看到可視化的搜索界面及數據:
隨便打開一個json以下:
{ "_index": "content", "_type": "content", "_id": "2", "_score": 1, "_source": { "id": 2, "title": "《態度》", "content": "人類的幸福不是來自偶然的幸運,而是來自天天的小恩惠", "type": 2, "category": "文學", "read": 888, "support": 88 } }
查詢請求:能夠經過curl 或者postman構造一個請求以下:
POST /api/content/search HTTP/1.1 Host: 127.0.0.1:8080 Content-Type: application/json Cache-Control: no-cache { "searchContent":"Java", "type":2, "pageSize":3, "pageNumber":0 }
對應結果以下:
{ "code": 0, "message": "success", "data": { "pageNumber": 0, "pageSize": 3, "totalPage": 1, "totalCount": 1, "result": [ { "id": 3, "title": "《Java 編程思想》", "content": "Java 是世界上最diao的語言", "type": 2, "category": "計算", "read": 999, "support": 100 } ] } }
這裏根據 searchContent 匹配短語 +type 匹配單個字段,一塊兒構建了搜索語句。用於搜索出咱們期待的結果,就是《Java 編程思想》。