elasticsearch和analysis-ik的安裝使用

全文搜索和中文分詞主要介紹了兩組全文搜索加中文分詞方案;
TNTSearch+jieba-php這套組合對于博客這類的小項目基本夠用了;
但是如果最求性能追求更強大的功能的話;
那更優(yōu)的選擇就非 elasticsearch 莫屬了;
elasticsearch 需要 java8 以上;
這里安裝最新版的 java10 ;
下載 jdk

wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http:%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/10.0.1+10/fb4372174a714e6b8c52526dc134031e/jdk-10.0.1_linux-x64_bin.rpm"

Bash

Copy

因為版本會一直升級;
如果執(zhí)行上面這段代碼返回了 ERROR 404: Not Found ;
那說明有新版本了;
那就自己去官網(wǎng)復制最新的下載鏈接;
http://www.oracle.com/technetwork/java/javase/downloads/jdk10-downloads-4416644.html ;

image

選中 Accept License Agreement 然后在 jdk-10.0.1_linux-x64_bin.rpm 上右鍵復制鏈接地址;
替換上面命令中的下載鏈接;

安裝 jdk 注意文件名要跟鏈接中的保持一直;

sudo rpm -ivh jdk-10.0.1_linux-x64_bin.rpm

Bash

Copy

能查看到版本號則表示安裝成功;

java -version

Bash

Copy

下載 elasticsearch ;

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.2.4.rpm

Bash

Copy

安裝 elasticsearch ;

sudo rpm -ivh elasticsearch-6.2.4.rpm

Bash

Copy

安裝完成后編輯配置項

vim /etc/elasticsearch/elasticsearch.yml

Bash

Copy

去掉下面三行的注釋;

bootstrap.memory_lock: true
network.host: 192.168.0.1
http.port: 9200

Bash

Copy

然后把 network.host 改成 localhost

image

啟動 elasticsearch ;

sudo systemctl daemon-reload
sudo systemctl enable elasticsearch.service
sudo systemctl start elasticsearch

Bash

Copy

稍等片刻給 elasticsearch 個啟動的時間;
因為 elasticsearch 啟動的略慢;
后續(xù)涉及到重啟 elasticsearch 的時候也都記得稍等片刻;

然后查看 9200 端口檢查是否成功啟動;

netstat -plntu

Bash

Copy

image

如果半天過后仍然沒有啟動起來;
可能是內(nèi)存不夠出錯;

vim /etc/elasticsearch/jvm.options

Bash

Copy

把內(nèi)存改為自己服務(wù)器內(nèi)存的一半以下;
比如說這里改為 512M ;


image

嘗試啟動;

sudo systemctl restart elasticsearch

Bash

Copy

查看狀態(tài)是否正常;

curl 'localhost:9200'

Bash

Copy

image

至此 elasticsearch 算是安裝完成了;
但是如果想用來搜索中文;
還需要安裝中文分詞;
怎么算分詞呢?
全文搜索和中文分詞 文章中已經(jīng)簡單介紹過了;
這里我們從 elasticsearch 實戰(zhàn)一遍;
比如說 白俊遙技術(shù)博客 這句話;
elasticsearch內(nèi)置的分詞器對中文相當不友好;
只會一個只一個字的分;

curl -H 'Content-Type: application/json'  -XGET 'localhost:9200/_analyze?pretty' -d '{"text":"白俊遙技術(shù)博客"}'

Bash

Copy

image

所以我們需要一個中文分詞器;
這里選擇和 elasticsearch 配套的 ik-analyzer ;

安裝 ik-analyzer ;

/usr/share/elasticsearch/bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.2.4/elasticsearch-analysis-ik-6.2.4.zip

Bash

Copy

如果報下面這種錯誤的話可能是網(wǎng)絡(luò)不好;

Exception in thread "main" java.net.ConnectException: Connection timed out (Connection timed out)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

Bash

Copy

沐浴更衣大念帥白最帥;
再試幾次即可;

然后重新啟動下服務(wù);

sudo systemctl restart elasticsearch

Bash

Copy

看下 ik-analyzer 的效果;

curl -H 'Content-Type: application/json'  -XGET 'localhost:9200/_analyze?pretty' -d '{"analyzer":"ik_max_word","text":"白俊遙技術(shù)博客"}'

Bash

Copy

image

我們可以看到 技術(shù) 和 博客 兩個詞語已經(jīng)成功組合到了一起;
然而本博主 白俊遙 的名字被硬生生的拆成了3個字這怎么忍;

還好強大的 analysis-ik 支持自定義詞庫;
增加自定義詞庫;

vim /etc/elasticsearch/analysis-ik/IKAnalyzer.cfg.xml

Bash

Copy

image

增加一個 白俊遙 到詞庫;

echo '白俊遙' > /etc/elasticsearch/analysis-ik/baijunyao.dic

Bash

Copy

重新啟動下服務(wù);

sudo systemctl restart elasticsearch

Bash

Copy

再看下分詞效果 ;

curl -H 'Content-Type: application/json'  -XGET 'localhost:9200/_analyze?pretty' -d '{"analyzer":"ik_max_word","text":"白俊遙技術(shù)博客"}'

Bash

Copy

image

雙擊 666 ;
本來準備一口氣把 elasticsearch 在 laravel 中的應(yīng)用也寫完的;
不過看著情形今個是完不成了;
下篇文章繼續(xù)哈;

原文鏈接:
https://baijunyao.com/article/155

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容