ES默認(rèn)的analyzer(分詞器),對(duì)英文單詞比較友好,對(duì)中文分詞效果不好。不過(guò)ES支持安裝分詞插件,增加新的分詞器。
1、如何指定analyzer?
默認(rèn)的分詞器不滿足需要,可以在定義索引映射的時(shí)候,指定text字段的分詞器
例子:
PUT /article
{
"mappings": {
"properties": {
"title": {
"type": "text",
"analyzer": "smartcn"
}
}
}
}
只要在定義text字段的時(shí)候,增加一個(gè)analyzer配置,指定分詞器即可,這里指定的分詞器是smartcn,后面會(huì)介紹怎么安裝smartcn插件。
分詞器種類
目前中文分詞器比較常用的有:smartcn和ik兩種, 下面分別介紹這兩種分詞器。
smartcn分詞器
smartcn是目前ES官方推薦的中文分詞插件,不過(guò)目前不支持自定義詞庫(kù)。
插件安裝方式:
{ES安裝目錄}/bin/elasticsearch-plugin install analysis-smartcn
安裝完成后,重啟ES即可 一定要重啟不然找不到分詞器?。?!。
smartcn的分詞器名字就叫做:smartcn
smartcn中文分詞效果
GET /_analyze
{
"text": "紅燒牛肉面",
"analyzer": "smartcn"
}
{
"tokens" : [
{
"token" : "紅燒",
"start_offset" : 0,
"end_offset" : 2,
"type" : "word",
"position" : 0
},
{
"token" : "牛肉面",
"start_offset" : 2,
"end_offset" : 5,
"type" : "word",
"position" : 1
}
]
}
ik分詞器
ik支持自定義擴(kuò)展詞庫(kù),有時(shí)候分詞的結(jié)果不滿足我們業(yè)務(wù)需要,需要根據(jù)業(yè)務(wù)設(shè)置專門(mén)的詞庫(kù),詞庫(kù)的作用就是自定義一批關(guān)鍵詞,分詞的時(shí)候優(yōu)先根據(jù)詞庫(kù)設(shè)置的關(guān)鍵詞分割內(nèi)容,例如:詞庫(kù)中包含 “上海大學(xué)” 關(guān)鍵詞,如果對(duì)“上海大學(xué)在哪里?”進(jìn)行分詞,“上海大學(xué)” 會(huì)做為一個(gè)整體被切割出來(lái)。(需要重啟es)
安裝ik插件:
// 到這里找跟自己ES版本一致的插件地址
https://github.com/medcl/elasticsearch-analysis-ik/releases
我本地使用的ES版本是7.8.0,所以選擇的Ik插件版本地址是:
https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.8.0/elasticsearch-analysis-ik-7.8.0.zip
安裝命令
{ES安裝目錄}/bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.8.0/elasticsearch-analysis-ik-7.8.0.zip
ik中文分詞效果
ik分詞插件支持 ik_smart 和 ik_max_word 兩種分詞器
ik_smart - 粗粒度的分詞
ik_max_word - 會(huì)盡可能的枚舉可能的關(guān)鍵詞,就是分詞比較細(xì)致一些,會(huì)分解出更多的關(guān)鍵詞
例1:
GET /_analyze
{
"text": "上海人民廣場(chǎng)麻辣燙",
"analyzer": "ik_max_word"
}
輸出:
{
"tokens" : [
{
"token" : "上海人",
"start_offset" : 0,
"end_offset" : 3,
"type" : "CN_WORD",
"position" : 0
},
{
"token" : "上海",
"start_offset" : 0,
"end_offset" : 2,
"type" : "CN_WORD",
"position" : 1
},
{
"token" : "人民",
"start_offset" : 2,
"end_offset" : 4,
"type" : "CN_WORD",
"position" : 2
},
{
"token" : "廣場(chǎng)",
"start_offset" : 4,
"end_offset" : 6,
"type" : "CN_WORD",
"position" : 3
},
{
"token" : "麻辣燙",
"start_offset" : 6,
"end_offset" : 9,
"type" : "CN_WORD",
"position" : 4
},
{
"token" : "麻辣",
"start_offset" : 6,
"end_offset" : 8,
"type" : "CN_WORD",
"position" : 5
},
{
"token" : "燙",
"start_offset" : 8,
"end_offset" : 9,
"type" : "CN_CHAR",
"position" : 6
}
]
}
例2:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-500323.html
GET /_analyze
{
"text": "上海人民廣場(chǎng)麻辣燙",
"analyzer": "ik_smart"
}
輸出:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-500323.html
{
"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" : "廣場(chǎng)",
"start_offset" : 4,
"end_offset" : 6,
"type" : "CN_WORD",
"position" : 2
},
{
"token" : "麻辣燙",
"start_offset" : 6,
"end_offset" : 9,
"type" : "CN_WORD",
"position" : 3
}
]
}
到了這里,關(guān)于【ElasticSearch】中文分詞器的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!