【ES】3.安装elasticsearch-analysis-ik分词器插件

平凡也就两个字: 懒和惰;
成功也就两个字: 苦和勤;
优秀也就两个字: 你和我。
跟着我从0学习JAVA、spring全家桶和linux运维等知识,带你从懵懂少年走向人生巅峰,迎娶白富美!
关注微信公众号【 IT特靠谱 】,每天都会分享技术心得~

【ES】安装elasticsearch-analysis-ik分词器插件

1 什么是ik分词器?

      ik分词器是一个分词插件。它可以把elasticsearch中数据映射类型为text(注意:其他类型是不会被分词的!比如:keyword、date类型等)的数据按照分词库切分成一个个关键字!同时也会将我们搜索信息进行分词,然后与es数据库信息进行匹配!

      ik分词器有两种分词算法:ik_smartik_max_word。ik_smart是一种最小切分算法,ik_max_word是最细粒度切分算法。工作中一般常用ik_max_word算法进行分词!

      注意:ik分词器会把分词库中没有的中文按每个字进行拆分。如果不想被拆分成单个汉字,那么我们就需要维护一套自己的分词库!

2 下载ik分词器插件

      打开github官网,搜索"elasticsearch-analysis-ik",第一个项目就是ik分词器插件的。

      进入"medcl/elasticsearch-analysis-ik"项目

      然后点击tags,然后找到7.6.2版本的插件下载即可!

      下载后如下:

3 安装ik分词器插件

3.1 安装ik分词器插件

      我们只需解压ik分词器插件安装包,然后将解压文件拷贝到elasticsearch安装目录下的plugin目录下,最后重启elasticsearch服务就完成了ik分词器插件的安装!

3.2 重启es服务,使得重新加载ik分词器插件

      重启es服务的目的是重新让es服务加载我们安装的ik分词器插件!

4 测试分词器

     ik分词器有2种算法:ik_smart和ik_max_word,下面我们通过postman工具来测试ik分词器的分词算法!

     注意:ik分词器会把分词库中没有的中文按每个字进行拆分。如果不想被拆分成单个汉字,那么我们就需要维护一套自己的分词库!

4.1 测试ik_smart分词

请求url:http://localhost:9200/_analyze

请求方式:get

请求参数:

{
    "analyzer":"ik_smart",
    "text":"我爱你,特靠谱"
}

响应结果:

{
    "tokens": [
        {
            "token": "我爱你",
            "start_offset": 0,
            "end_offset": 3,
            "type": "CN_WORD",
            "position": 0
        },
        {
            "token": "特",
            "start_offset": 4,
            "end_offset": 5,
            "type": "CN_CHAR",
            "position": 1
        },
        {
            "token": "靠",
            "start_offset": 5,
            "end_offset": 6,
            "type": "CN_CHAR",
            "position": 2
        },
        {
            "token": "谱",
            "start_offset": 6,
            "end_offset": 7,
            "type": "CN_CHAR",
            "position": 3
        }
    ]
}

4.2 测试ik_max_word分词

请求url:http://localhost:9200/_analyze

请求方式:get

请求参数:

{
    "analyzer":"ik_max_word",
    "text":"我爱你,特靠谱"
}

响应结果:

{
    "tokens": [
        {
            "token": "我爱你",
            "start_offset": 0,
            "end_offset": 3,
            "type": "CN_WORD",
            "position": 0
        },
        {
            "token": "爱你",
            "start_offset": 1,
            "end_offset": 3,
            "type": "CN_WORD",
            "position": 1
        },
        {
            "token": "特",
            "start_offset": 4,
            "end_offset": 5,
            "type": "CN_CHAR",
            "position": 2
        },
        {
            "token": "靠",
            "start_offset": 5,
            "end_offset": 6,
            "type": "CN_CHAR",
            "position": 3
        },
        {
            "token": "谱",
            "start_offset": 6,
            "end_offset": 7,
            "type": "CN_CHAR",
            "position": 4
        }
    ]
}

      通过对比两种算法分词结果可知:ik_smart算法将"我爱你"当作关键词,而ik_max_word算法认为"我爱你"和"爱你"都是关键词词!但是这两种算法都认为"特"、"靠"、"谱"这三个字都是单独的词!也就是说ik_smart(最小切分算法)切分数据的次数最小,而ik_max_word(最细粒度切分算法)切分的次数最多!

      如果我们想实现将"特靠谱"当作一个词进行拆分,而不是对每个字进行拆分。那么我们就需要维护一套自定义分词词库!

5 自定义分词词库

      上面测试例子可以看到,不管是ik_smart还是ik_max_word算法,都不认为"特靠谱"是一个关键词(ik分词器的自带词库中没有有"特靠谱"这个词),所以将这个词拆成了三个词:特、靠和谱。

      为了实现将特靠谱认为是一个关键词,我们就需要维护一套分词词库!

5.1 新增自定义词库

      打开es安装目录下D:\workSoftInstall\es\elasticsearch-7.6.2\的plugins\ik\目录,我们的ik分词器插件就放在ik目录下!进入config配置文件夹。

      从其他xxxx.dic分词库拷贝一份,并命名为:my.dic(名字可以自定义)。这样我们自定义的分词词库就建立好了。

5.2 自定义词库中新增关键词

      打开my.dic,并添加一些关键词,如:"特靠谱"、"靠谱"等。每一行就是一个关键词。

5.3 配置自定义分词词库(字典)

      打开配置文件IKAnalyzer.cfg.xml

       指定自定义分词词库名称。

      重启es服务就可以进行测试了!

6 再次测试ik_smart和ik_max_word两种分词算法

6.1 测试ik_smart分词

请求url:http://localhost:9200/_analyze

请求方式:get

请求参数:

{
    "analyzer":"ik_smart",
    "text":"我爱你,特靠谱"
}

响应结果:

{
    "tokens": [
        {
            "token": "我爱你",
            "start_offset": 0,
            "end_offset": 3,
            "type": "CN_WORD",
            "position": 0
        },
        {
            "token": "特靠谱",
            "start_offset": 4,
            "end_offset": 7,
            "type": "CN_WORD",
            "position": 1
        }
    ]
}

6.2 测试ik_max_word分词

请求url:http://localhost:9200/_analyze

请求方式:get

请求参数:

{
    "analyzer":"ik_max_word",
    "text":"我爱你,特靠谱"
}

响应结果:

{
    "tokens": [
        {
            "token": "我爱你",
            "start_offset": 0,
            "end_offset": 3,
            "type": "CN_WORD",
            "position": 0
        },
        {
            "token": "爱你",
            "start_offset": 1,
            "end_offset": 3,
            "type": "CN_WORD",
            "position": 1
        },
        {
            "token": "特靠谱",
            "start_offset": 4,
            "end_offset": 7,
            "type": "CN_WORD",
            "position": 2
        },
        {
            "token": "靠谱",
            "start_offset": 5,
            "end_offset": 7,
            "type": "CN_WORD",
            "position": 3
        }
    ]
}

      可以看到,ik_smart和ik_max_world分词算法都认为"特靠谱"是一个关键词,而ik_max_world分词算法同时会将"靠谱"认为是一个关键词!

      到此,ik分词器插件安装成功了!

    (1) 商务合作微信号:M9392W

    (2) 购物商城: 扫码即可进入博主开发的小程序购物商城,享超大优惠购物,支持一下博主吧~

    (3) 博主微信公众号IT特靠谱,学习更多开发实战技巧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT_Most

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值