一,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" : {}
		}
	}
}

# 分词正确