提示:文章寫(xiě)完后,目錄可以自動(dòng)生成,如何生成可參考右邊的幫助文檔
前言
本文介紹IK Analyzer分詞器的安裝配置、使用以及ES數(shù)據(jù)遷移。
一、IK分詞器的安裝配置
1.克隆elasticsearch-analysis-ik
克隆IK分詞器項(xiàng)目,根據(jù)README的描述選擇對(duì)應(yīng)版本的分支。瀏覽器訪問(wèn)ES的ip+端口就能看到版本信息,所以我需要切到master分支。
打開(kāi)pom需要調(diào)整一些依賴的版本,與你安裝的es版本一致,否則無(wú)法使用插件。
<elasticsearch.version>7.9.2</elasticsearch.version>
修改版本后reload project,可能會(huì)編譯不通過(guò),需要修改代碼,比如我遇到的這個(gè)問(wèn)題工具類包路徑變了,重新導(dǎo)包就行;另一個(gè)是父類的構(gòu)造方法變了,填入對(duì)應(yīng)的參數(shù)等。切換不同版本的elasticsearch包需要修改的部分可能不一樣。
2.編譯并安裝分詞器插件
使用maven的package打包項(xiàng)目后會(huì)在target生成一個(gè)releases目錄,里面有一個(gè)zip包,elasticsearch-analysis-ik-version.zip
進(jìn)入es安裝目錄,創(chuàng)建一個(gè)目錄,再解壓上述文件,其中config目錄中包含分詞詞典,可以自定義詞典。
到這一步就可以啟動(dòng)es測(cè)試分詞效果了。
使用kibana訪問(wèn)
#ik_smart模式分詞
GET /_analyze
{
"analyzer": "ik_smart",
"text": "中國(guó)駐洛杉磯領(lǐng)事館遭亞裔男子槍擊 嫌犯已自首"
}
#es默認(rèn)分詞
GET /_analyze
{
"analyzer": "standard",
"text": "中國(guó)駐洛杉磯領(lǐng)事館遭亞裔男子槍擊 嫌犯已自首"
}
3.自定義分詞詞典
自定義詞典需要?jiǎng)?chuàng)建一個(gè)文本以dic結(jié)尾,每行一個(gè)詞,且,編輯IKAnalyzer.cfg.xml
,使用相對(duì)路徑,多個(gè)詞典使用英文分號(hào)分隔。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>IK Analyzer 擴(kuò)展配置</comment>
<!--用戶可以在這里配置自己的擴(kuò)展字典 -->
<entry key="ext_dict">mydic.dic;mydic2.dic;</entry>
<!--用戶可以在這里配置自己的擴(kuò)展停止詞字典-->
<entry key="ext_stopwords"></entry>
<!--用戶可以在這里配置遠(yuǎn)程擴(kuò)展字典 -->
<!-- <entry key="remote_ext_dict">words_location</entry> -->
<!--用戶可以在這里配置遠(yuǎn)程擴(kuò)展停止詞字典-->
<!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>
4.注意事項(xiàng)
1.關(guān)于ik的兩種模式
ik_smart模式,是以最粗粒度進(jìn)行分詞。如果關(guān)鍵字本身就是分詞庫(kù)中的一個(gè)詞語(yǔ),那么將不會(huì)進(jìn)一步分詞;如果它包含多個(gè)分詞庫(kù)中的分詞,每次取最先獲取到的分詞,再對(duì)剩余的詞語(yǔ)分詞。例如有“聯(lián)想臺(tái)式”、“臺(tái)式計(jì)算機(jī)”、“計(jì)算機(jī)”三個(gè)分詞;那么"聯(lián)想臺(tái)式計(jì)算機(jī)"的ik_smart分詞結(jié)果為“聯(lián)想臺(tái)式”、“計(jì)算機(jī)”,而不會(huì)有“臺(tái)式計(jì)算機(jī)”。(適合搜索時(shí)分詞)
ik_max_word則會(huì)窮舉所有的分詞。(適合建立索引時(shí)進(jìn)行分詞)
2.詞典只支持中文,因此中英混合詞語(yǔ)會(huì)拆分,但是英文數(shù)字可以作為一個(gè)詞語(yǔ)。
3.該插件雖然支持熱更新分詞庫(kù),但是只是針對(duì)搜索時(shí)進(jìn)行的分詞,底層的倒排索引并沒(méi)有改變。
二、ES數(shù)據(jù)遷移
1.建立新的索引
因?yàn)樵瓉?lái)沒(méi)有使用中文分詞器,中文會(huì)拆分成單獨(dú)的字,所以倒排索引中全是單個(gè)字,這時(shí)候使用match搜索,搜索條件按詞典分詞了,但是詞語(yǔ)并不能匹配到文檔中的內(nèi)容。所以需要重建建立索引,讓ES按照我們的詞典去建立倒排記錄表。
2.將舊索引數(shù)據(jù)導(dǎo)入新索引
使用es的reindex操作,其中slices是分片數(shù),可理解為多線程執(zhí)行reindex操作,refresh是執(zhí)行完后刷新。舊索引的名稱是my_index_v1,新索引是my_index_v2
#重建索引
POST _reindex?slices=5&refresh
{
"source": {
"index": "my_index_v1"
},
"dest": {
"index": "my_index_v2"
},
"script": {
"source": """
//我將索引中的myName改成了my_name,reindex時(shí)舊索引字段會(huì)默認(rèn)copy進(jìn)新索引,所以我需要?jiǎng)h除myName,并將值賦值給my_name。如果沒(méi)有這類操作,可以刪除script。
ctx._source.my_name = ctx._source.remove("myName");
""",
"lang": "painless"
}
}
數(shù)據(jù)量大的話重建請(qǐng)求會(huì)超時(shí),此時(shí)可以利用task查看它的任務(wù)
#查看reindex的任務(wù)列表需要顯示任務(wù)詳情
GET _tasks?detailed=true&actions=*reindex
任務(wù)完成后文檔數(shù)量應(yīng)與舊索引文檔數(shù)量一致文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-516948.html
GET /_cat/count/my_index_v2?v
之后將新索引添加別名,系統(tǒng)連接es時(shí)使用索引別名。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-516948.html
#添加別名
POST /_aliases
{
"actions": [
{
"add": {
"index": "my_index_v2",
"alias": "my_index"
}
}
]
}
到了這里,關(guān)于Elasticsearch安裝中文分詞器IK Analyzer的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!