IK分词器的使用

首先我们通过Postman发送GET请求查询分词效果

GET http://localhost:9200/_analyze
{
"text":"农业银行"
}

得到如下结果,可以发现es的默认分词器无法识别中文中农业银行这样的词汇,而是简单的将每个字拆完分为一个词,这显然不符合我们的使用要求。

{
"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
}
]
}

首先我们访问 https://github.com/medcl/elasticsearch-analysis-ik/releases 下载与es对应版本的中文分词器。将解压后的后的文件夹放入es根目录下的plugins目录下,重启es即可使用。

我们这次加入新的参数"analyzer":"ik_max_word"

  • k_max_word:会将文本做最细粒度的拆分,例如「中华人民共和国国歌」会被拆分为「中华人民共和国、中华人民、中华、华人、人民共和国、人民、人、民、共和国、共和、和、国国、国歌」,会穷尽各种可能的组合
  • ik_smart:会将文本做最粗粒度的拆分,例如「中华人民共和国国歌」会被拆分为「中华人民共和国、国歌」
GET http://localhost:9200/_analyze
{
"analyzer":"ik_max_word",
"text":"农业银行"
}

得到如下结果

{
"tokens": [
{
"token": "农业银行",
"start_offset": 0,
"end_offset": 4,
"type": "CN_WORD",
"position": 0
},
{
"token": "农业",
"start_offset": 0,
"end_offset": 2,
"type": "CN_WORD",
"position": 1
},
{
"token": "银行",
"start_offset": 2,
"end_offset": 4,
"type": "CN_WORD",
"position": 2
}
]
}

百度搜索中每天都会收录新的词汇,es中也可以进行扩展词汇。

我们首先查询弗雷尔卓德字段

GET http://localhost:9200/_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": 3,
"type": "CN_CHAR",
"position": 2
},
{
"token": "卓",
"start_offset": 3,
"end_offset": 4,
"type": "CN_CHAR",
"position": 3
},
{
"token": "德",
"start_offset": 4,
"end_offset": 5,
"type": "CN_CHAR",
"position": 4
}
]
}

首先进入es根目录中的plugins文件夹下的ik文件夹,进入config目录,创建custom.dic文件,写入弗雷尔卓德。同时打开IKAnalyzer.cfg文件,将新建的custom.dic配置其中,重启es。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>IK Analyzer 扩展配置</comment>
<!--用户可以在这里配置自己的扩展字典 -->
<entry key="ext_dict">custom.doc</entry>
<!--用户可以在这里配置自己的扩展停止词字典-->
<entry key="ext_stopwords"></entry>
<!--用户可以在这里配置远程扩展字典 -->
<!-- <entry key="remote_ext_dict">words_location</entry> -->
<!--用户可以在这里配置远程扩展停止词字典-->
<!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>

再次查询发现es的分词器可以识别到弗雷尔卓德词汇

{
"tokens": [
{
"token": "弗雷尔卓德",
"start_offset": 0,
"end_offset": 5,
"type": "CN_WORD",
"position": 0
},
{
"token": "弗雷尔",
"start_offset": 0,
"end_offset": 3,
"type": "CN_WORD",
"position": 1
},
{
"token": "卓",
"start_offset": 3,
"end_offset": 4,
"type": "CN_CHAR",
"position": 2
},
{
"token": "德",
"start_offset": 4,
"end_offset": 5,
"type": "CN_CHAR",
"position": 3
}
]
}

最新文章

  1. 将Centos的yum源更换为国内的阿里云源
  2. android 音乐播放器
  3. Linux 系统把英文修改成中文界面
  4. Java导包——import语句
  5. Tomcat发布网站知识集锦
  6. Redis附加功能之Redis流水线pipeline
  7. jQuery两句话实现HTML转义与反转义
  8. spring.net +dapper 打造简易的DataAccess 工具类.
  9. URAL 1820. Ural Steaks(数学啊 )
  10. Java 序列化 对象序列化和反序列化
  11. Linux笔记(三) - 文件搜素
  12. MPLS LDP随堂笔记1
  13. 计算机信息系统安全保护等级划分准则(GB 17859-1999)
  14. C++添加热键和捕获组合键
  15. Linux 集群架构
  16. idea引入svn
  17. PHP开发中遇到的问题
  18. Django基础学习七之如何配置django+mysql
  19. oracle 行转列和列转行
  20. git reset revert区别

热门文章

  1. java架构之路-(JVM优化与原理)JVM类的加载机制
  2. RocketMQ 源码学习笔记————Producer 是怎么将消息发送至 Broker 的?
  3. Docker 第一个HelloWorld镜像
  4. 关于SpringBoot 1.x和2.x版本差别
  5. 智慧金融时代,大数据和AI如何为业务赋能
  6. spring boot通过Jedis来操作redis
  7. 1.linux系统基础笔记(互斥量、信号量)
  8. Windows 8.1硬盘安装Ubuntu 14.04双系统参考教程及多硬盘注意事项
  9. SystemMetrics
  10. Web安全 --Wfuzz 使用大全