ElasticSearch7安装IK中文分词器

之前我们创建索引,查询数据,都是使用的默认的分词器,分词效果不太理想,会把text的字段分成一个一个汉字,然后搜索的时候也会把搜索的句子进行分词,所以这里就需要更加智能的分词器IK分词器了。

实验环境

  • 操作系统:CentOS7
  • ES版本:7.10.0
  • IK:elasticsearch-analysis-ik-7.10.0.zip

ik分词器的下载和安装,测试

下载

下载地址:https://github.com/medcl/elasticsearch-analysis-ik/releases,这里你需要根据你的Es的版本来下载对应版本的IK,这里我使用的是7.10.0的ES,所以就下载elasticsearch-analysis-ik-7.10.0.zip
的文件。

https://github.com/medcl/elasticsearch-analysis-ik/releases/tag/v7.10.0
解压

将文件复制到 es的安装目录/plugin/ik下面即可

[es@localhost ik]$ pwd
/home/es/elasticsearch-7.10.0/plugins/ik
[es@localhost ik]$ ll
total 1432
-rw-r--r--. 1 es es 263965 May  6  2018 commons-codec-1.9.jar
-rw-r--r--. 1 es es  61829 May  6  2018 commons-logging-1.2.jar
drwxr-xr-x. 2 es es   4096 Dec 25  2019 config
-rw-r--r--. 1 es es  54625 Nov 12 10:01 elasticsearch-analysis-ik-7.10.0.jar
-rw-r--r--. 1 es es 736658 May  6  2018 httpclient-4.5.2.jar
-rw-r--r--. 1 es es 326724 May  6  2018 httpcore-4.4.4.jar
-rw-r--r--. 1 es es   1807 Nov 12 10:01 plugin-descriptor.properties
-rw-r--r--. 1 es es    125 Nov 12 10:01 plugin-security.policy

到这里已经完成了,不需要去elasticSearch的 elasticsearch.yml 文件去配置。

重启

重启ElasticSearch

测试
  • 未使用ik分词器的时候测试分词效果
POST book/_analyze
{
  "text": "我是中国人"
}

结果是

{
  "tokens": [
    {
      "token": "我",
      "start_offset": 0,
      "end_offset": 1,
      "type": "<IDEOGRAPHIC>",
      "position": 0
    },
    {
      "token": "是",
      "start_offset": 1,
      "end_offset": 2,
      "type": "<IDEOGRAPHIC>",
      "position": 1
    },
    {
      "token": "中",
      "start_offset": 2,
      "end_offset": 3,
      "type": "<IDEOGRAPHIC>",
      "position": 2
    },
    {
      "token": "国",
      "start_offset": 3,
      "end_offset": 4,
      "type": "<IDEOGRAPHIC>",
      "position": 3
    },
    {
      "token": "人",
      "start_offset": 4,
      "end_offset": 5,
      "type": "<IDEOGRAPHIC>",
      "position": 4
    }
  ]
}

  • 使用IK分词器之后,结果如下
POST book/_analyze
{
  "analyzer": "ik_max_word",
  "text": "中华人民共和国"
}

结果如下:

{"tokens": [
      {
      "token": "中华人民共和国",
      "start_offset": 0,
      "end_offset": 7,
      "type": "CN_WORD",
      "position": 0
   },
      {
      "token": "中华人民",
      "start_offset": 0,
      "end_offset": 4,
      "type": "CN_WORD",
      "position": 1
   },
      {
      "token": "中华",
      "start_offset": 0,
      "end_offset": 2,
      "type": "CN_WORD",
      "position": 2
   },
      {
      "token": "华人",
      "start_offset": 1,
      "end_offset": 3,
      "type": "CN_WORD",
      "position": 3
   },
      {
      "token": "人民共和国",
      "start_offset": 2,
      "end_offset": 7,
      "type": "CN_WORD",
      "position": 4
   },
      {
      "token": "人民",
      "start_offset": 2,
      "end_offset": 4,
      "type": "CN_WORD",
      "position": 5
   },
      {
      "token": "共和国",
      "start_offset": 4,
      "end_offset": 7,
      "type": "CN_WORD",
      "position": 6
   },
      {
      "token": "共和",
      "start_offset": 4,
      "end_offset": 6,
      "type": "CN_WORD",
      "position": 7
   },
      {
      "token": "国",
      "start_offset": 6,
      "end_offset": 7,
      "type": "CN_CHAR",
      "position": 8
   }
]}

对于上面两个分词效果的解释:

  1. 如果未安装ik分词器,那么,你如果写 “analyzer”: “ik_max_word”,那么程序就会报错,因为你没有安装ik分词器
  2. 如果你安装了ik分词器之后,你不指定分词器,不加上 “analyzer”: “ik_max_word” 这句话,那么其分词效果跟你没有安装ik分词器是一致的,也是分词成每个汉字。

ik分词器的分词类型

ik_max_word: 会将文本做最细粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,中华人民,中华,华人,人民共和国,人民,人,民,共和国,共和,和,国国,国歌”,会穷尽各种可能的组合;

ik_smart: 会做最粗粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,国歌”。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值