es 中文分词器IK
一,lk分词器概述
1.1 IK分词器简介
IKAnalyzer 是一个开源的,基于 Java 语言开发的轻量级的中文分词工具包,从 2006 年 12 月推出 1.0 版开始,IKAnalyzer 已经推出了 3 个大版本。最初,它是以开源项目 Lucene 为应用主体的,结合词典分词和文法分析算法的中文分词组件。新版本的 IKAnalyzer3.0 则发展为面向 Java 的公用分词组件,独立与 Lucene 项目,同时提供了对 Lucene 的默认优化实现
1.2 Ik分词器特性
采用了特有的”正向迭代最细粒度切分算法“,具有 60 万字/秒的高速处理能力。
采用了多子处理器分析模式,支持:英文字母(IP 地址、Email、URL)、数字(日期、常用中文数量词、罗马数字、科学计数法)、中文词汇(姓名、地名)等分词处理。
对中英联合支持不是很好,在这方面的处理比较麻烦,需再做一次查询,同时是支持个人词条的优化的词典存储,更小的内存占用。
支持用户词典扩展定义。
针对 Lucene 全文检索优化的查询分析器 IKQueryParser;采用歧义分析算法优化查询关键字的搜索排列组合,能极大的提高 Lucene 检索的命中率。
1.3 中文分词配置
# 配置前提条件
1.所有的ES节点都需要安装
2.所有的ES都需要重启才能生效
3.中文分词器的版本号要和ES的版本号对应
# 配置中文分词器
1.第一步:下载安装分词器
在线安装
cd /usr/share/elasticsearch
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.6.0/elasticsearch-analysis-ik-6.6.0.zip
本地安装
下载分词器6.60版本地址:
https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.6.0/elasticsearch-analysis-ik-6.6.0.zip
elasticsearch-analysis-ik-6.6.0.zip
/usr/share/elasticsearch/bin/elasticsearch-plugin install file:///root/elasticsearch-analysis-ik-6.6.0.zip
1.2 所有节点重启
systemctl restart elasticsearch.service
二,中文分词器的使用
1 创建索引
PUT /news2
2 创建模板
POST /news2/text/_mapping
{
"properties": {
"content": {
"type": "text",
"analyzer": "ik_max_word", # 存储数据分词时使用最细分词粒度
"search_analyzer": "ik_smart" # 查询数据分词时使用最粗分词粒度
}
}
}
3 插入数据
POST /news2/text/1
{"content":"美国留给伊拉克的是个烂摊子吗"}
POST /news2/text/2
{"content":"公安部:各地校车将享最高路权"}
POST /news2/text/3
{"content":"中韩渔警冲突调查:韩警平均每天扣1艘中国渔船"}
POST /news2/text/4
{"content":"中国驻洛杉矶领事馆遭亚裔男子枪击 嫌犯已自首"}
4 查询数据
POST /news2/_search
{
"query" : { "match" : { "content" : "中国" }},
"highlight" : {
"pre_tags" : ["<tag1>", "<tag2>"],
"post_tags" : ["</tag1>", "</tag2>"],
"fields" : {
"content" : {}
}
}
}
三,配置中文分词库
[root@es03 ~]# vim /etc/elasticsearch/analysis-ik/IKAnalyzer.cfg.xml
<?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">/etc/elasticsearch/config/my.dic</entry>
<!--用户可以在这里配置自己的扩展停止词字典-->
<entry key="ext_stopwords"></entry>
<!--用户可以在这里配置远程扩展字典 -->
<!-- <entry key="remote_ext_dict">words_location</entry> -->
<!--用户可以在这里配置远程扩展停止词字典-->
<!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>
3.1 编辑分词文件
[root@es03 ~]# cat /etc/elasticsearch/config/my.dic
中国
3.2 重启服务
[root@es01 ~]# systemctl restart elasticsearch.service
3.3 重新插入数据
1.建立索引
PUT /news
3.创建mapping
POST /news/text/_mapping
{
"properties": {
"content": {
"type": "text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_smart"
}
}
}
3.插入数据
POST /news/text/1
{"content":"美国留给伊拉克的是个烂摊子吗"}
POST /news/text/2
{"content":"公安部:各地校车将享最高路权"}
POST /news/text/3
{"content":"中韩渔警冲突调查:韩警平均每天扣1艘中国渔船"}
POST /news/text/4
{"content":"中国驻洛杉矶领事馆遭亚裔男子枪击 嫌犯已自首"}
3.4 再次查询关键字
POST /news/_search
{
"query" : { "match" : { "content" : "中国" }},
"highlight" : {
"pre_tags" : ["<tag1>", "<tag2>"],
"post_tags" : ["</tag1>", "</tag2>"],
"fields" : {
"content" : {}
}
}
}
# 分词正确