連續加班近一個多月,項目終於告一段落了,也騰出時間寫一寫項目中用到的東西。在這個項目中,我負責的主要是多種業務場景下的數據查詢和搜索,其中搜索用到了ElasticSearch搜索引擎。下面主要圍繞ElasticSearch的安裝、項目中的使用方式以及踩過的一些坑進行總結。(本博客主要針對ElasticSearch的使用,對一些原理不作過多解釋)node
1.ElasticSearch是什麼linux
ElasticSearch是一個基於Lucene的搜索服務器。它提供了一個分佈式多用戶能力的全文搜索引擎,基於RESTful web接口。說的通俗一點,就是是一個比較好、用起來也比較方便的搜索服務器。通常項目中若是用到關鍵字搜索,就能夠將數據存入到ElasticSearch,搜索效率比較高。(下面ElasticSearch簡稱ES)git
在關係型數據庫中,通常有數據庫、表、行、和列的概念。在ES中有: github
索引index(相似於數據庫)web
類型type(相似於表的概念,在ES7以後,就沒有了type)、sql
document(相似於一行記錄)數據庫
feild字段,每一個document的內容都是一些字段及對應的值。(字段至關於數據庫的列)api
對於存入ES的數據,ES會進行分詞(字段是否分詞,採用什麼分詞器分詞在添加映射的時候——也就是建立type結構的時候指定)。瀏覽器
2.ElasticSearch安裝bash
首先說明:
在安裝ES的時候,首先強調一點,ES啓動的時候不能使用root用戶啓動,若是拿root用戶啓動失敗了,則刪除logs目錄,在從新切換到普通用戶啓動便可。下面會強調這個問題。
此外,ES是Java開發的時候,因此安裝ES以前,須要先安裝JDK。
(1)下載安裝包
在官網下載ES的安裝包:https://www.elastic.co/downloads/elasticsearch
將安裝包放在linux下的一個目錄下進行解壓,我選擇的是opt目錄:
tar -zxvf elasticsearch-7.0.0-linux-x86_64.tar.gz
cd elasticsearch-7.0.0
cd config
(2)編輯config目錄下的elasticsearch.yml
修改如下幾個選項:
cluster.name: study-es
node.name: node01
network.host: 192.168.1.8
http.port: 9200
discovery.zen.ping.timeout:120s #設置集羣中自動發現其餘節點時ping鏈接的超時時間
discovery.zen.ping.multicast.enabled:false #設置是否打開多播發現節點
discovery.zen.ping.unicast.hosts:["192.168.1.8:9200","192.168.1.9:9200","192.168.1.10:9200"]
(3)將配置分發到其餘節點.
scp -r elasticsearch-7.0.0/ root@192.168.1.9:`pwd`
scp -r elasticsearch-7.0.0/ root@192.168.1.10:`pwd`
分發以後,去對應的節點修改個別配置
(4)普通用戶啓動es
若是是root用戶對ES進行的安裝和配置,那麼切換到普通用戶啓動ES通常沒有權限,因此須要將ES相關的文件給普通用戶受權。
它和它下面的文件夾和目錄都屬於root用戶和root用戶組。
個人linux上有test用戶,test用戶也屬於test用戶組。
chown -R test:test elasticsearch-7.0.0/
ll命令查看:
su test //切換到test用戶
cd bin ./elasticsearch
在瀏覽器查看,輸入地址192.168.1.8:9200
3.中文分詞插件的安裝
下載分詞zip包,若是下載源碼包還須要本身安裝,下載地址:https://github.com/medcl/elasticsearch-analysis-ik/releases
(1)進入elasticsearch安裝目錄下的plugins目錄,建立ik目錄
cd elasticsearch-7.0.0/plugins/
mkdir ik
(2)解壓分詞包,並拷貝到ik目錄下
unzip elasticsearch-analysis-ik-7.0.0.zip #解壓出來的目錄叫elasticsearch cd elasticsearch #進入剛剛解壓出來的elasticsearch目錄 cp -r ./* /opt/elasticsearch-7.0.0/plugins/ik/ #拷貝當前目錄全部子目錄和文件到elasticsearch的ik目錄下
(3)從新啓動ES
分詞器安裝可參考連接:https://www.jianshu.com/p/1c4d489f18fe
ES安裝先說到這。後面會對 ElasticSearch的使用(包括restful api 、Java API、ElasticSearch-Sql)以及踩過的一些坑進行總結。這些坑包括下面幾個問題,暫時只想起來這麼多:
搜索時的大小寫問題
wildcard模糊查詢:*和?
sql語句的and or 等的優先級問題
post請求中文查詢亂碼問題
分頁查詢的時候,若是頁數特別大,查詢效率會很低的問題