博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ElasticSearch(六):IK分词器的安装与使用IK分词器创建索引
阅读量:6903 次
发布时间:2019-06-27

本文共 3310 字,大约阅读时间需要 11 分钟。

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

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

第一: 下载地址: ,这里你需要根据你的Es的版本来下载对应版本的IK,这里我使用的是6.3.2的ES,所以就下载ik-6.3.2.zip的文件。

第二: 解压-->将文件复制到 es的安装目录/plugin/ik下面即可,完成之后效果如下:

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

第三:重启ElasticSearch

第四:测试效果

未使用ik分词器的时候测试分词效果:

POST book/_analyze{  "text": "我是中国人"}//结果是:{  "tokens": [    {      "token": "我",      "start_offset": 0,      "end_offset": 1,      "type": "
", "position": 0 }, { "token": "是", "start_offset": 1, "end_offset": 2, "type": "
", "position": 1 }, { "token": "中", "start_offset": 2, "end_offset": 3, "type": "
", "position": 2 }, { "token": "国", "start_offset": 3, "end_offset": 4, "type": "
", "position": 3 }, { "token": "人", "start_offset": 4, "end_offset": 5, "type": "
", "position": 4 } ]}

使用IK分词器之后,结果如下:

POST book_v6/_analyze{  "analyzer": "ik_max_word",  "text": "我是中国人"}//结果如下:{  "tokens": [    {      "token": "我",      "start_offset": 0,      "end_offset": 1,      "type": "CN_CHAR",      "position": 0    },    {      "token": "是",      "start_offset": 1,      "end_offset": 2,      "type": "CN_CHAR",      "position": 1    },    {      "token": "中国人",      "start_offset": 2,      "end_offset": 5,      "type": "CN_WORD",      "position": 2    },    {      "token": "中国",      "start_offset": 2,      "end_offset": 4,      "type": "CN_WORD",      "position": 3    },    {      "token": "国人",      "start_offset": 3,      "end_offset": 5,      "type": "CN_WORD",      "position": 4    }  ]}

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

1. 如果未安装ik分词器,那么,你如果写 "analyzer": "ik_max_word",那么程序就会报错,因为你没有安装ik分词器

2. 如果你安装了ik分词器之后,你不指定分词器,不加上  "analyzer": "ik_max_word" 这句话,那么其分词效果跟你没有安装ik分词器是一致的,也是分词成每个汉字。

2. 创建指定分词器的索引

索引创建之后就可以使用ik进行分词了,当你使用ES搜索的时候也会使用ik对搜索语句进行分词,进行匹配。

PUT book_v5{  "settings":{    "number_of_shards": "6",    "number_of_replicas": "1",       //指定分词器      "analysis":{         "analyzer":{        "ik":{          "tokenizer":"ik_max_word"        }      }    }  },  "mappings":{    "novel":{      "properties":{        "author":{          "type":"text"        },        "wordCount":{          "type":"integer"        },        "publishDate":{          "type":"date",          "format":"yyyy-MM-dd HH:mm:ss || yyyy-MM-dd"        },        "briefIntroduction":{          "type":"text"        },        "bookName":{          "type":"text"        }      }    }  }}

关于ik分词器的分词类型(可以根据需求进行选择):

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

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

POST book_v6/_analyze{  "analyzer": "ik_smart",  "text": "我是中国人"}//结果{  "tokens": [    {      "token": "我",      "start_offset": 0,      "end_offset": 1,      "type": "CN_CHAR",      "position": 0    },    {      "token": "是",      "start_offset": 1,      "end_offset": 2,      "type": "CN_CHAR",      "position": 1    },    {      "token": "中国人",      "start_offset": 2,      "end_offset": 5,      "type": "CN_WORD",      "position": 2    }  ]}

 

转载于:https://www.cnblogs.com/chenmc/p/9525163.html

你可能感兴趣的文章
介绍几个常见的Git代码托管平台
查看>>
线上婚庆管理系统
查看>>
rpm包管理功能全解
查看>>
如何设置将EXCHANGE 邮件收到本地PST 文件中
查看>>
python变量的定义
查看>>
Java连接mysql
查看>>
devops干货分享
查看>>
不害怕“早恋”:欣赏孩子的成熟
查看>>
oracle 正则表达式
查看>>
nmon 性能:分析 AIX 和 Linux 性能的免费工具
查看>>
Python面向对象
查看>>
从0到1,蘑菇街怎样打破应用运维自动化的技术藩篱
查看>>
Vmware Vcenter创建虚拟机模板
查看>>
【Django源码浅析】—Django runserver启动流程与URL路由
查看>>
Html5添加文件上传组件美化插件教程
查看>>
InfoSphere Streams——实时大数据分析平台
查看>>
keepalived+lvs实现负责均衡群集
查看>>
Exchange server 2003迁移到2010无路由组连接器
查看>>
xcode lldb gdb调试
查看>>
经典SQL语句大全
查看>>