1.背景

1.1 简介

ES默认的分词器对中文分词并不友好,所以一般会安装中文分词插件,以便能更好的支持中文分词检索。

1.2 IK分词器

IK分词器在是一款基于词典和规则的中文分词器。这里讲解的IK分词器是独立于Elasticsearch、Lucene、Solr,可以直接用在java代码中的部分。实际工作中IK分词器一般都是集成到Solr和Elasticsearch搜索引擎里面使用。
IK分词采用Java编写。
IK分词的效果主要取决于词库,目前自带主词典拥有27万左右的汉语单词量。对于应用领域的不同,需要各类专业词库的支持。词库还可以自己维护。
IK分词器地址:https://github.com/medcl/elasticsearch-analysis-ik
IK分词器有两种分词模式:ik_max_word和ik_smart。

下载安装包

  1. 下载预编译的安装包,下载地址:https://github.com/medcl/elasticsearch-analysis-ik/releases
  1. 下载对应版本,IK版本与Elasticsearch版本一致
  1. 将IK包加入到Elasticsearch插件目录下,新建ik目录,参考如下:

1.3 分词模式

IK分词器有两种分词模式:
  1. 细粒度模式 ik_max_word
  1. 智能模式 ik_smart

细粒度模式

采用细粒度模式ik_max_word:会将文本做最细粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,中华人民,中华,华人,华,人民共和国,人民,人,民,共和国,共和,和,国国,国歌”,会穷尽各种可能的组合。测试代码:
 GET /_analyze
{
"text": ["中华人民共和国国歌"],
"analyzer": "ik_max_word"
}

分词规则

  1. 当查询词在词典中不存在时,会按字拆分。如:在风->在,风
  1. 当查询词在词典中存在,且长度为两个字时,有时拆分有时不拆分。例如:甲乙–>甲乙 , 联通–>联通,联,通
  1. 当查询词在词典中存在,且查询词的一部分也在词典在中存在,则分别拆分。例如:甲乙丙丁–>甲乙丙丁,甲乙,丙丁 中国联通–>中国联通,中国,国联,联通,通
  1. 当查询词任意部分都不在词典中存储,则按字拆分

智能模式

智能模式ik_smart会做最粗粒度的拆分。比如会将“中华人民共和国国歌”拆分为“中华人民共和国,国歌”,适合 Phrase 查询。
 GET /_analyze
{
"text": ["中华人民共和国国歌"],
"analyzer": "ik_smart"
}

分词规则

  1. 当查询词在词典中不存在时,会按字拆分 例如:在北–>在,北
  1. 当查询词在词典中存在,不做拆分 例如:甲乙–>甲乙,甲乙丙丁–>甲乙丙丁
  1. 当查询词任意部分都不在词典中存储,则按字拆分

2.分词实践

2.1 词典配置

很多时候默认的分词效果达不到线上使用的要求,这就需要不断维护扩展词典和停止词字典,提高分词匹配的准确性,优化用户体验。
在IK分词器中,主要可以维护2种词典,一种是扩展词典,可以自定义一些词语,提高分词精读。
另一种是停止词词典,停止词就是指不会被分词拆分出来的词语,不参与分词和检索操作。
可以通过修改IKAnalyzer.cfg.xml配置文件,来自定义词典。IKAnalyzer.cfg.xml的位置为{plugins}/ik/config/。

注意事项

  1. ext_dict:直接修改ext_dict属性中配置的字段里面的内容,并不能立刻生效。只有重启ES进程实例,修改的内容才会生效。
  1. remote_ext_dict:通过远程扩展的字典,可以实现词典的热更新,不用重启ES进程实例。

2.2 词典热更新

配置词典代理

配置词典源有多种模式,如tomact容器,Nginx代理等,本例基于Nginx配置代理如下:
Nginx按照参考:《Nginx按照教程》
 server {
listen 8084;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
location /ik-remote-dic {
alias /opt/elasticsearch/ik-config;
autoindex on;
}
........

设置词典值

在目录下设置数据词典(本例为: /opt/elasticsearch/ik-config),由于是中文分词,特别注意文件的字符格式(UTF-8),参考如下:

配置远程词典源

2.3 分词应用

关键词查询,未做扩展的数据字典:
 GET /_analyze
{
"text": "成都数康公司,通商速子股份有限公司,字节不跳动公司,头颅后侧位工时,王令",
"analyzer": "ik_smart"
}
关键词查询,做扩展的数据字典:
 GET /_analyze
{
"text": "重庆数康公司,通商数字股份有限公司,字节跳动公司,头颅正侧位工时,王令,王玲的报告,测试是报告",
"analyzer": "ik_smart"
}

 

ELK技术-IK-中文分词器的更多相关文章

  1. Solr学习笔记之2、集成IK中文分词器

    Solr学习笔记之2.集成IK中文分词器 一.下载IK中文分词器 IK中文分词器 此文IK版本:IK Analyer 2012-FF hotfix 1 完整分发包 二.在Solr中集成IK中文分词器 ...

  2. 真分布式SolrCloud+Zookeeper+tomcat搭建、索引Mysql数据库、IK中文分词器配置以及web项目中solr的应用(1)

    版权声明:本文为博主原创文章,转载请注明本文地址.http://www.cnblogs.com/o0Iris0o/p/5813856.html 内容介绍: 真分布式SolrCloud+Zookeepe ...

  3. Kafka:ZK+Kafka+Spark Streaming集群环境搭建(十九)ES6.2.2 安装Ik中文分词器

    注: elasticsearch 版本6.2.2 1)集群模式,则每个节点都需要安装ik分词,安装插件完毕后需要重启服务,创建mapping前如果有机器未安装分词,则可能该索引可能为RED,需要删除后 ...

  4. es5.0 安装ik中文分词器 mac

    es5.0集成ik中文分词器,网上资料很多,但是讲的有点乱,有的方法甚至不能正常运行此插件 特别注意的而是,es的版本一定要和ik插件的版本相对应: 1,下载ik 插件: https://github ...

  5. elasticsearch ik中文分词器安装

    特殊说明:灰色文字用来辅助理解的. 安装IK中文分词器 我在百度上搜索了下,大多介绍的都是用maven打包下载下来的源码,这种方法也行,但是不够方便,为什么这么说? 首先需要安装maven吧?其次需要 ...

  6. ElasticSearch速学 - IK中文分词器远程字典设置

    前面已经对”IK中文分词器“有了简单的了解:  但是可以发现不是对所有的词都能很好的区分,比如:  逼格这个词就没有分出来. 词库 实际上IK分词器也是根据一些词库来进行分词的,我们可以丰富这个词库. ...

  7. 搜索引擎ElasticSearch系列(五): ElasticSearch2.4.4 IK中文分词器插件安装

    一:IK分词器简介  IK Analyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包.从2006年12月推出1.0版开始, IKAnalyzer已经推出了4个大版本.最初,它是以开源 ...

  8. ES-Mac OS环境搭建-ik中文分词器

    下载 从github下载ik中文分词器,点击地址,需要注意的是,ik分词器和elasticsearch版本必须一致. 安装 下载到本地并解压到elasticsearch中的plugins目录内即可. ...

  9. 30.IK中文分词器的安装和简单使用

    在之前我们学的都是英文,用的也是英文的standard分词器.从这一节开始,学习中文分词器.中国人基本上都是中文应用,很少是英文的,而standard分词器是没有办法对中文进行合理分词的,只是将每个中 ...

  10. Solr7.2.1环境搭建和配置ik中文分词器

    solr7.2.1环境搭建和配置ik中文分词器 安装环境:Jdk 1.8. windows 10 安装包准备: solr 各种版本集合下载:http://archive.apache.org/dist ...

随机推荐

  1. 从零开始学Java——个人笔记(持续更新中)

    从零开始学Java 学习流程 第一阶段:建立编程思想 Java概述 变量 运算符 控制结构 数组.排序和查找 面向对象编程(基础) 面向对象编程(中级) 项目&学习以致用 编程之乐 第二阶段: ...

  2. Java Web servlet 详解

    执行原理 当服务器接收到客户端浏览器的访问时,会解析请求的URL路径,获取访问的Servlet的资源路径 查找web.xml文件,看是否有对应的<url-pattern>标签体内容 如果有 ...

  3. python这不是有手就行?——python音频处理基础知识

    大家应该都知道声音的基础吧? 啊不知道当我没说吧~~~ 1.声音的基础 2.python读取.wav音频 Python学习交流Q群:660193417#### import wave import s ...

  4. Mysql错误:The server time zone value is unrecognized or represents more than one time zone

    方法1.修改Mysql的时区为东8区,执行如下命令即可: PS:这种方式每次开机都要配置的 set global time_zone='+8:00' 方法2.配置改成这样的 spring.dataso ...

  5. 从UI Designer上面动态创建下拉列表

    在UI Desigher上创建一个新的列表 并创建2个值,code 和value 添加一个EventHandler 在EventHandler上面添加一个Operation 类型为script$dat ...

  6. NC204859 组队

    NC204859 组队 题目 题目描述 你的团队中有 \(n\) 个人,每个人有一个能力值 \(a_i\),现在需要选择若干个人组成一个团队去参加比赛,由于比赛的规则限制,一个团队里面任意两个人能力的 ...

  7. Redis如何实现多可用区?

    在如今的业务场景下,高可用性要求越来越高,核心业务跨可用区已然成为标配.腾讯云数据库高级工程师刘家文结合腾讯云数据库的内核实战经验,给大家分享Redis是如何实现多可用区,内容包含Redis主从版.集 ...

  8. 写了个 Markdown 命令行小工具,希望能提高园友们发文的效率!

    写了个 Markdown 命令行小工具,希望能提高园友们发文的效率! 前言 笔者使用 Typora 来编写 Markdown 格式的博文,图片采用的是本地相对路径存储(太懒了不想折腾图床). 时间久了 ...

  9. Django WEB开发 - Django 3.0 Tutorial入门

    1. Django 官方网站 https://docs.djangoproject.com/zh-hans/3.0/intro/tutorial01/ 2. Model View Controller ...

  10. 【Go语言】(一)环境搭建与了解VScode工具

    视频链接(p1~p8): golang入门到项目实战 [2022最新Go语言教程,没有废话,纯干货!] 参考链接: 用vscode开发go的时候,安装go包报错:connectex: A connec ...