IK 分詞器
我們在ES中最常用的中文分詞器就是IK分詞器,其項目地址為:https://github.com/medcl/elasticsearch-analysis-ik
下載安裝
-
下載地址: https://github.com/medcl/elasticsearch-analysis-ik/releases
-
下載時注意和es的版本對應(yīng),我們es版本為:8.6.2。所以我們下載 elasticsearch-analysis-ik-8.6.2.zip 解壓包內(nèi)容如下:
-
在ES home/plugins 目錄下創(chuàng)建目錄 ik,并將我們下載下zip包解壓到 es_home/plugins/ik 目錄下
-
重啟 ES 服務(wù)
使用
IK 分詞器有如下方式使用:
analyzer 和 tokenizer 均可配置使用 ik 分詞器,兩種配置對應(yīng)的值均為如下兩個:
- ik_smart (最粗粒度的拆分,比如會將“中華人民共和國國歌”拆分為“中華人民共和國,國歌”,適合 Phrase 查詢)
- ik_max_word(最細粒度的拆分,比如會將“中華人民共和國國歌”拆分為“中華人民共和國,中華人民,中華,華人,人民共和國,人民,人,民,共和國,共和,和,國國,國歌”,會窮盡各種可能的組合,適合 Term Query)
ik_max_word 示例
{
"analyzer" : "ik_max_word",
"text" : "我們都是中國人"
}
或
{
"tokenizer" : "ik_max_word",
"text" : "我們都是中國人"
}
解析結(jié)果:
{
"tokens": [
{
"token": "我們",
"start_offset": 0,
"end_offset": 2,
"type": "CN_WORD",
"position": 0
},
{
"token": "都是",
"start_offset": 2,
"end_offset": 4,
"type": "CN_WORD",
"position": 1
},
{
"token": "中國人",
"start_offset": 4,
"end_offset": 7,
"type": "CN_WORD",
"position": 2
},
{
"token": "中國",
"start_offset": 4,
"end_offset": 6,
"type": "CN_WORD",
"position": 3
},
{
"token": "國人",
"start_offset": 5,
"end_offset": 7,
"type": "CN_WORD",
"position": 4
}
]
}
ik_smart 示例
{
"tokenizer" : "ik_smart",
"text" : "我們都是中國人"
}
解析結(jié)果:
{
"tokens": [
{
"token": "我們",
"start_offset": 0,
"end_offset": 2,
"type": "CN_WORD",
"position": 0
},
{
"token": "都是",
"start_offset": 2,
"end_offset": 4,
"type": "CN_WORD",
"position": 1
},
{
"token": "中國人",
"start_offset": 4,
"end_offset": 7,
"type": "CN_WORD",
"position": 2
}
]
}
IK 分詞器字典擴展
在 ik 的文件的 config 目錄下有 ik 分詞的配置文件(IKAnalyzer.cfg.xml)以及相關(guān)的 dic 字典文件。
IKAnalyzer.cfg.xml 文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>IK Analyzer 擴展配置</comment>
<!--用戶可以在這里配置自己的擴展字典 -->
<entry key="ext_dict"></entry>
<!--用戶可以在這里配置自己的擴展停止詞字典-->
<entry key="ext_stopwords"></entry>
<!--用戶可以在這里配置遠程擴展字典 -->
<!-- <entry key="remote_ext_dict">words_location</entry> -->
<!--用戶可以在這里配置遠程擴展停止詞字典-->
<!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>
注釋說得很明確了,我們來總結(jié)一下就是 IK 支持兩種擴展方式:
- 本地 dic 文件擴展
- 遠程配置擴展
本地 dic 文件擴展
1. 在 ik 的 config 目錄下創(chuàng)建我們的擴展詞典文件:my_ext_dic.dic
在文件中添加我們要擴展的詞
my_ext_dic.dic
科比布萊恩特
我們就加科比的名字吧
2. 修改 IKAnalyzer.cfg.xml 配置
IKAnalyzer.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>IK Analyzer 擴展配置</comment>
<!--用戶可以在這里配置自己的擴展字典 -->
<entry key="ext_dict">my_ext_dic.dic</entry>
<!--用戶可以在這里配置自己的擴展停止詞字典-->
<entry key="ext_stopwords"></entry>
<!--用戶可以在這里配置遠程擴展字典 -->
<!-- <entry key="remote_ext_dict">words_location</entry> -->
<!--用戶可以在這里配置遠程擴展停止詞字典-->
<!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>
- 重啟 ES 服務(wù)
- 驗證是否成功
{
"tokenizer" : "ik_max_word",
"text" : "NBA籃球巨星,科比布萊恩特中國行"
}
查看結(jié)果,最終的分詞中一定會有“科比布萊恩特”這樣完整的詞語。
遠程擴展字典
IKAnalyzer.cfg.xml 配置
<!--用戶可以在這里配置遠程擴展字典 -->
<!-- <entry key="remote_ext_dict">words_location</entry> -->
<!--用戶可以在這里配置遠程擴展停止詞字典-->
<!-- <entry key="remote_ext_stopwords">words_location</entry> -->
words_location 需要替換為我們遠程的url,比如:https://aaaa.com/dics文章來源:http://www.zghlxwxcb.cn/news/detail-486134.html
對遠程url的要求
- http 請求需要返回兩個 header,一個是 Last-Modified,一個是 ETag,這兩者都是字符串類型,只要有一個發(fā)生變化,ik 插件就會去抓取新的分詞進而更新詞庫。
- http 請求返回的內(nèi)容格式是一行一個分詞,換行符用 \n 即可。
使用nginx或其他web服務(wù)器提供字典擴展服務(wù)
- 可以將字典放在 UTF-8 編碼的 .txt 文件中,然后將文件放在web服務(wù)器中,當這個 .txt 文件更新時,ik 會自動獲取并更新擴展詞典。
遠程擴展字典的方式無需重啟 ES 服務(wù),只是在字典管理上來說,擴展字段文件獨立于 ES 服務(wù)了,在字典需要頻繁修改等時候,我們還可以自定義一個管理端應(yīng)用,動態(tài)的通過應(yīng)用來修改。文章來源地址http://www.zghlxwxcb.cn/news/detail-486134.html
到了這里,關(guān)于Elasticsearch 中文分詞器的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!