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获取汉字的大小写拼音码(汉字的拼音首字母)

    import java.io.UnsupportedEncodingException; /** * 获取拼音码 * * @author xmj * */ public class GetPinyin ...

  2. 【Java面试】RDB 和 AOF 的实现原理、优缺点

    Hi,大家好,我是Mic. 一个工作了5年的粉丝私信我,最近面试碰到很多Redis相关的问题. 其中一个面试官问他Redis里面的持久化机制,没有回答得很好. 希望我帮他系统回答一下. 关于Redis ...

  3. 【cartogarpher_ros】一: ros系统下的快速安装

    Cartographer是一个跨多个平台和传感器配置提供 2D 和 3D实时同步定位和映射 ( SLAM ) 的系统. 使用Cartographer有Ros集成环境和无Ros环境,对于新手快速入门,推 ...

  4. 【问题解决】Axios调用文件下载获取不到文件名

    问题描述 自己开发了一个后端下载文件的接口,然后通过浏览器直接访问这个接口,浏览器能正确得到文件名并下载: 而使用Axios时发现获取不到,经过打印响应体发现响应头里没有文件名 而Java后端代码里是 ...

  5. GET 和 POST 请求的区别与安全性

    超文本传输协议( HTTP )是用于启用客户端与服务器之间的通信,其中 GET 请求和 POST 请求是则是 HTTP 方法中最为常用的两种.那么这 GET 和 POST 的区别到底是什么呢?两者是否 ...

  6. Mysql 系列 | 日志模块

    了解了 SQL 执行的流程,知道每一条语句都经过连接器.查询存储.分析器.优化器.执行器最后到存储引擎的过程.查询语句是如此,更新语句也不例外. 不同的是,更新语句会修改表数据,这里就涉及到两个重要的 ...

  7. ajax02_封装自己的jQuery库和ajax请求

    封装自己的ajax类库 首先封装自己的 jQuery库 启发:css的元素选择器思想 简单的代码实现 function jQuery(selector){ if(typeof selector == ...

  8. NOI / 2.3基本算法之递归变递推-6262:流感传染

    OpenJudge - 6262:流感传染http://noi.openjudge.cn/ch0203/6262/ 6262:流感传染​​​​​​ 总时间限制: 1000ms 内存限制: 65536k ...

  9. 合并表格行---三层for循环遍历数据

    合并表格行---三层for循环遍历数据 示例1 json <!DOCTYPE html> <html lang="zh_cn"> <head> ...

  10. Border Theory

    持续更新中!!!更个屁,无线停更! 前言: KMP 学傻了,看 skyh 说啥 border 树,跑来学 border 理论 洛谷云剪切板:https://www.luogu.com.cn/paste ...