白话Elasticsearch28-IK中文分词之IK中文分词器的安装和使用
文章目錄
- 概述
- Github
- IK安裝
- ik分詞器基礎知識
- ik_max_word
- ik_smart
- 驗證ik分詞器
- 示例
概述
繼續跟中華石杉老師學習ES,第28篇
課程地址: https://www.roncoo.com/view/55
之前大家會發現,我們全部是用英文在學習,其實我們更習慣用中文做搜索。
英文默認的standard分詞器沒有辦法對中文進行合理分詞的,只是將每個中文字符一個一個的切割開來,比如說中國人 --> 中 國 人
在搜索引擎領域,比較成熟和流行的,就是ik分詞器
舉個簡單的例子: 中國人很喜歡吃油條,不全,但是意思已經表達的很清楚了。
standard:中 國 人 很 喜 歡 吃 油 條 ik:中國人 很 喜歡 吃 油條Github
https://github.com/medcl/elasticsearch-analysis-ik
IK安裝
根據github上的指導
第一種安裝方法:
-
訪問 https://github.com/medcl/elasticsearch-analysis-ik/releases ,找到對應版本的ik插件安裝包
-
在es安裝目錄 plugins 下 新建目錄 ik
-
將 zip包解壓到 ik目錄下 ,我這里用的是6.4.1 ,所以我下載對應的版本的ik
- 重啟es ,觀察啟動日志 loaded plugin [analysis-ik]
ik分詞器基礎知識
ik有兩種analyzer,可根據自己的需要自己選擇,但是一般是選用ik_max_word
ik_max_word
ik_max_word: 會將文本做最細粒度的拆分,比如會將“中華人民共和國國歌”拆分為“中華人民共和國,中華人民,中華,華人,人民共和國,人民,人,民,共和國,共和,和,國國,國歌”,會窮盡各種可能的組合;
ik_smart
ik_smart: 會做最粗粒度的拆分,比如會將“中華人民共和國國歌”拆分為“中華人民共和國,國歌”。 比如這個時候搜索“共和國” --> 中華人民共和國和國歌,搜到嗎???? 顯然不能搜索的到。 根據場景合理選擇。
驗證ik分詞器
新建個索引
PUT /artisan {"mappings": {"my_type": {"properties": {"text": {"type": "text","analyzer": "ik_max_word"}}}} }查看分詞
GET /artisan/_analyze {"text": "小工匠跟中華石杉老師學習分布式搜索引擎elasticsearch","analyzer": "ik_max_word" }返回
{"tokens": [{"token": "小工","start_offset": 0,"end_offset": 2,"type": "CN_WORD","position": 0},{"token": "工匠","start_offset": 1,"end_offset": 3,"type": "CN_WORD","position": 1},{"token": "跟","start_offset": 3,"end_offset": 4,"type": "CN_CHAR","position": 2},{"token": "中華","start_offset": 4,"end_offset": 6,"type": "CN_WORD","position": 3},{"token": "石","start_offset": 6,"end_offset": 7,"type": "CN_CHAR","position": 4},{"token": "杉","start_offset": 7,"end_offset": 8,"type": "CN_CHAR","position": 5},{"token": "老師","start_offset": 8,"end_offset": 10,"type": "CN_WORD","position": 6},{"token": "學習","start_offset": 10,"end_offset": 12,"type": "CN_WORD","position": 7},{"token": "分布式","start_offset": 12,"end_offset": 15,"type": "CN_WORD","position": 8},{"token": "分布","start_offset": 12,"end_offset": 14,"type": "CN_WORD","position": 9},{"token": "式","start_offset": 14,"end_offset": 15,"type": "CN_CHAR","position": 10},{"token": "搜索引擎","start_offset": 15,"end_offset": 19,"type": "CN_WORD","position": 11},{"token": "搜索","start_offset": 15,"end_offset": 17,"type": "CN_WORD","position": 12},{"token": "索引","start_offset": 16,"end_offset": 18,"type": "CN_WORD","position": 13},{"token": "引擎","start_offset": 17,"end_offset": 19,"type": "CN_WORD","position": 14},{"token": "elasticsearch","start_offset": 19,"end_offset": 32,"type": "ENGLISH","position": 15}] }說明ik分詞器 安裝成功 。
示例
造點數據
POST /artisan/my_type/_bulk { "index": { "_id": "1"} } { "text": "男子偷上萬元發紅包求交女友 被抓獲時仍然單身" } { "index": { "_id": "2"} } { "text": "16歲少女為結婚“變”22歲 7年后想離婚被法院拒絕" } { "index": { "_id": "3"} } { "text": "深圳女孩騎車逆行撞奔馳 遭索賠被嚇哭(圖)" } { "index": { "_id": "4"} } { "text": "女人對護膚品比對男票好?網友神懟" } { "index": { "_id": "5"} } { "text": "為什么國內的街道招牌用的都是紅黃配?" }查詢
GET /artisan/my_type/_search {"query": {"match": {"text": "16歲少女結婚好還是單身好?"}} }返回
{"took": 50,"timed_out": false,"_shards": {"total": 5,"successful": 5,"skipped": 0,"failed": 0},"hits": {"total": 3,"max_score": 2.8514345,"hits": [{"_index": "artisan","_type": "my_type","_id": "2","_score": 2.8514345,"_source": {"text": "16歲少女為結婚“變”22歲 7年后想離婚被法院拒絕"}},{"_index": "artisan","_type": "my_type","_id": "4","_score": 1.4914938,"_source": {"text": "女人對護膚品比對男票好?網友神懟"}},{"_index": "artisan","_type": "my_type","_id": "1","_score": 0.2876821,"_source": {"text": "男子偷上萬元發紅包求交女友 被抓獲時仍然單身"}}]} } 《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的白话Elasticsearch28-IK中文分词之IK中文分词器的安装和使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 白话Elasticsearch27-深度
- 下一篇: 白话Elasticsearch29-IK