ElasticSearch是一個基於Lucene的搜索服務器。它提供了一個分布式多用戶能力的全文搜索引擎,基於RESTful web接口。Elasticsearch是用Java開發的,並作為Apache許可條款下的開放源碼發布,是當前流行的企業級搜索引擎。設計用於雲計算中,能夠達到實時搜索,穩定,可靠,快速,安裝使用方便。
一、下載ElasticSearch
官網下載地址:https://www.elastic.co/cn/downloads/elasticsearch
注意,現在ElasticSearch的最新版本為7.1.1,與6.x版本相比改動較大,但相關資源(穩定的SDK)並沒有更新,所以容易造成問題,所以推薦下載6.8的版本使用。
二、安裝ElasticSearch
新建ElasticSearchService文件夾,在該文件夾內新建node-1和node-2兩個文件夾。將下載到的壓縮包內的文件復制到node1文件夾內。
進入 node-1 > bin 目錄,在該文件夾下 shift+右鍵 打開PowerShell或者Cmd窗口,輸入 elasticsearch.bat 即可。注意,不同的cmd工具輸入的格式可能可能有些出入,比如在powershell中,需要寫成 ./elasticsearch
回車,等待程序啟動完成。
打開瀏覽器,輸入:http://localshot:9200,可以看到一段json數據,說明elasticsearch已經啟動成功。
三、安裝elasticsearch-head
ElasticSearch-head依賴NodeJs和Grunt,請先安裝好nodejs環境,在此不做贅述。
github地址:https://github.com/mobz/elasticsearch-head
如果已經安裝了git,可以直接使用git命令克隆一份代碼到本地 git clone git://github.com/mobz/elasticsearch-head.git ,沒有安裝也可以手動下載zip包,解壓后,后面的操作是一樣的。
進入elasticsearch-head目錄,運行 npm install ,因為某些原因,使用npm的速度會比較慢,所以建議使用 cnpm ,如果未安裝,請 參考這里 。安裝完成后,運行 cnpm install,靜等安裝完成即可。
當包全部安裝結束,使用 npm run start 命令啟動 elasticsearch-head
打開瀏覽器,輸入:http://localhost:9100,進入管理界面。
這時,我們發現elasticsearch-head無法連接到服務,這是因為它和elasticsearch的交互是通過ajax來完成的,這里會存在跨域的問題,
解決的方式也很簡單,找到elasticsearch的保存目錄,在config文件夾下使用vscode打開 elasticsearch.yml 文件,在最下方輸入以下代碼:
http.cors.enabled: true http.cors.allow-origin: "*"
保存,重啟elasticsearch服務,重新打開 http://localhost:9100,連接成功。
四、安裝多個ElasticSearch實例
ElasticSearch原生支持集群功能,配置起來也很簡單,還是上面提到的 elasticsearch.yml 文件,需要添加幾個配置:
- 集群名稱【cluster.name】,要添加到集群的所有節點中,這個配置項必須有而且必須一致
- 節點名稱【node.name】,當前節點的名稱,這個配置項必須有,而且在集群中必須唯一
- 綁定IP【network.host】,服務綁定的ip地址,默認是 127.0.0.1,本地測試時可以省略,生產環境下,必須要有
- http端口【http.port】,默認使用9200端口,因為我是在同一台電腦上配置多個節點,所以在這里必須配置一個不同的端口,如果是部署在不同的電腦上,這個可以省略
- 服務發現【discovery.zen.ping.unicast.hosts】,這里配置的是集群通訊用的端口,默認是9300,如果實在多台機器上部署節點,那端口號可以省略,但如果在同一台機器上部署多個節點,需要指定端口號,默認會自動往后排 9301,9302...
OK,下面實際操作一下,停止node-1的服務,把文件拷貝一份到node-2文件夾。
分別打開相應目錄下的 config > elasticsearch.yml文件,添加上面說到的配置項,最終的配置如下:
http.cors.enabled: true http.cors.allow-origin: "*" cluster.name: taoxue node.name: node-1
network.host: 127.0.0.1 http.port: 9200 discovery.zen.ping.unicast.hosts: ["127.0.0.1:9200", "127.0.0.1:9201"]
OK,分別啟動這兩個節點,在瀏覽器中打開 http://localhost:9200 和 http://localhost:9201,發現已經應用了我們的剛剛的配置。
這里注意下,如果你下載的是 7.x 版本的,集群配置稍有不同,這里我也貼一下在一台電腦上開多個節點的配置文件,但還是那句話,不建議使用7.x的版本,因為后面會有很多坑。
http.cors.enabled: true http.cors.allow-origin: "*" cluster.name: taoxue node.name: node-1 http.port: 9200 cluster.initial_master_nodes: ["node-1","node-2","node-3"]
http.cors.enabled: true http.cors.allow-origin: "*" cluster.name: taoxue node.name: node-2 http.port: 9201 cluster.initial_master_nodes: ["node-1","node-2","node-3"]
五、添加中文分詞器插件 ElasticSearch-IK
github地址:https://github.com/medcl/elasticsearch-analysis-ik/
下載已經打包好的release包,注意要跟我們安裝的ElasticSearch的版本一致。我安裝的6.8.1版本,這里沒有對應的IK版本,那就不管,找大版本最近的6.8.0。
下載完成以后,打開ElasticSearch的目錄的plugins文件夾,新建一個文件夾命名為ik,把壓縮包的內容拷貝進去。
啟動ElasticSearch服務,發現無法運行,大概的意思是插件IK是基於6.8.0構建的,而現在運行的是6.8.1版本。不要慌,在剛才的ik文件夾內找到一個名為 plugin-descriptor.properties 的文件,用vscode打開,直接滾動到最后一行, elasticsearch.version=6.8.0 ,把這里的 6.8.0 改成 6.8.1,保存,然后重新啟動服務,可以發現,可以正常啟動了。
至此,elasticsearch的安裝就結束了,下一篇,我們將嘗試使用aspnetcore + elasticsearch實現一些簡單的增刪改查的工作。