今天看了一下自己的部落格網站,發現内容越來越多,搜尋内容時無法全文檢索,體驗極差。
對于這個問題我最先想到的就是【ElasticSearch】資料庫簡稱ES,全文檢索這一塊ES是目前做的最好的一個了。其次想到的就是MySQL自帶的【n-gram模型】,這個模型也可以做全文檢索,但這會導緻資料庫壓力過大,隻适合少量使用者的場景,而且不支援多表全文檢索,缺點實在太多,最終還是選擇了ES來做全文檢索。
n-gram模型
在講解ES之前我們還是簡單的介紹一下MySQL自帶的n-gram模型的使用。
首先我們需要在表上面建立全文檢索索引:
# 以修改表的形式建立全文索引
ALTER TABLE 表名 ADD FULLTEXT INDEX 索引名稱(字段名,字段名...) WITH PARSER ngram;
# 建立索引
CREATE FULLTEXT INDEX 索引名稱 ON 表名(索引字段,字段名...) WITH PARSER ngram;
通過全文檢索查詢資料
SELECT * FROM 表名 WHERE MATCH(字段名,字段名...) AGAINST('待查詢的關鍵字');
全文檢索還有一個全局配置項【ngram_token_size】,這個主要影響中文及英文的内容,如果全文檢索主要内容為中文建議使用預設的【ngram_token_size=2】即可。如果是英文,可以在MySQL配置檔案中改為1,【ngram_token_size=2】時英文内容搜尋将無效。
MySQL全文檢索基礎使用就這麼多了。
ElasticSearch資料庫
這裡以ElasticSearch最新版【8.8.1】為例,給大家講講最新版的安裝、相關配置及基礎使用。注意我們安裝的是 ES8.8.1 版本,這個版本自帶一個JVM環境,ES從7開始就自動了一個JVM環境,ES7之前的版本需要我們自己安裝JVM環境
1 下載下傳安裝
我們可以直接進入官網下載下傳源碼,官網已經提供了yum及rpm安裝教材,這個教材還是比較詳細的,大家可以參照一下。我這裡以源碼的形式進行安裝:
1.1 在/usr/local/目錄下建立ElasticSearch的安裝目錄
mkdir elastic
1.2 進入ElasticSearch安裝目錄并下載下傳源碼
# 進入安裝目錄
cd elastic
# 下載下傳源碼
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.8.1-linux-x86_64.tar.gz
1.3 下載下傳解壓縮源碼
tar -zxvf elasticsearch-8.8.1-linux-x86_64.tar.gz
1.4 進入項目根目錄
解壓縮後生成 elasticsearch-8.8.1 目錄,這裡面的就是elasticsearch源碼了。
cd elasticsearch-8.8.1/
2 ElasticSearch基礎配置
elastic的主要配置檔案在根目錄的【config】目錄下,總共有以下三個配置檔案:
- elasticsearch.yml:主要是es相關配置
- jvm.options:jvm相關配置
- log4j2.properties:日志相關配置
3 啟動ElasticSearch
最新版本的ES不允許我們直接使用root使用者運作,是以在啟動ES之前我們還需要建立一個ES使用的系統使用者
# 建立使用者組
groupadd esgroup
# 建立使用者并指定其使用者組
useradd -g esgroup es
# 設定es密碼
passwd es 回車設定密碼
給新使用者賦予ES目錄的權限:
sudo chown -R es:esgroup /usr/local/elastic/
注意:後續操作中如果出現【es is not in the sudoers file. This incident will be reported】或者【Kibana should not be run as root. Use --allow-root to continue】及【Exception in thread "main" java.nio.file.AccessDeniedException】都是因為 ES8 不允許使用 root 使用者允許啟動
kibana運作時啟動需要指定參數才能以root使用者運作:bin/kibana --allow-root
除此之外,最新版本的ElasticSearch預設情況下啟用了使用者密碼驗證,作為初學者可以關閉驗證。而且最新版啟動後界面上沒有顯示監聽的端口,我們可以自己在elasticsearch.yml檔案中指定。
3.1 關閉使用者密碼驗證及指定監聽端口
修改【config/elasticsearch.yml】檔案中的【xpack.security.enabled】配置項為false即可
# 監聽端口
http.port: 9200
# 關閉使用者密碼驗證
xpack.security.enabled: false
3.2 啟動ElasticSearch
上面說過elasticsearch 8 之後不允許以 root 使用者啟動,是以我們需要切換到之前建立的【es】使用者下,如果已經切換到【es】使用者可以忽略:
su es
現在我們可以啟動elasticsearch了:
./bin/elasticsearch
如果需要以守護程序的方式啟動,隻需要加上 -d
如果啟動後如果有【Unable to locate appender "rolling_old" for logger config "root"】錯誤資訊,主要原因是我們沒有修改 【config/elasticsearch.yml】檔案中的日志目錄,預設的日志目錄不存在或者說目前啟動ES 的使用者沒有權限。我們隻要修改【path.logs】選項為【/usr/local/elastic/elasticsearch-8.8.1/logs】即可
啟動後,我們就可以通過IP+端口的形式通路ElasticSearch了:
http://127.0.0.1:9200/
上面的連接配接打開後如下圖所示,表示啟動成功:
4 安裝管理背景Kibana
ElasticSearch提供了類似phpMyAdmin一樣的網頁版本的管理背景。安裝管理背景比較簡單,回到【/usr/local/elastic】目錄下,下載下傳源碼并解壓縮,之後進入源碼目錄啟動管理背景即可。具體步驟如下:
4.1 下載下傳管理背景代碼
wget https://artifacts.elastic.co/downloads/kibana/kibana-8.8.1-linux-x86_64.tar.gz
4.2 解壓縮并進入源碼目錄
# 解壓縮
tar -zxvf kibana-8.8.1-linux-x86_64.tar.gz
# 進入解壓縮後的源碼目錄
cd kibana-8.8.1/
4.3 kibana配置目錄
kibana配置檔案都在源碼跟目錄下的【config】檔案夾下面,其中【kibana.yml】就是主要配置檔案。如果啟動後無法通過外網通路,可能是允許通路IP段的問題或者是防火牆未開放kibana監聽的端口,學些階段大家可以關閉防火牆。
# kibana監聽的端口
server.port: 5601
# 允許通路的IP段,我這裡測試使用,允許所有IP段通路,正式環境可以改成指定IP
server.host: "0.0.0.0"
4.4 啟動kibana
bin/kibana
如果在root使用者下,可以使用【bin/kibana --allow-root】指令啟動,--allow-root參數允許使用root使用者運作
啟動成功之後我們就可以通過IP+端口的方式通路ElasticSearch管理背景,預設端口是5601,完整連結如下:
http://localhost:5601
有遺漏或者不對的可以在我的公衆号留言哦