IK分词器的简单介绍
把一段中文划分成一个个的关键字,我们在搜索时候会把自己的语句进行分词,会把数据库中或者索引库中的数据进行分词,然后进行一个匹配操作 ,默认的中文分词是将每个字分成一个词。目前比较流行的是ik分词器是一个好用的中文分词器。
下载IK分词器
根据你的Es的版本来下载对应版本的IK,这里我使用的是7.16.2的ES,所以就下载ik-7.16.2.zip的文件(这种版本对应的整挺好)
下载网址
ElasticSearch:简单介绍以及使用Docker部署ElasticSearch 和 Kibana
我以这篇博客为基础,在服务器新创建一个plugins文件夹,好放ik插件,然后挂载
mkdir -p /usr/local/elasticsearch/plugins/ik
新创建的文件夹也要赋予用户操作权限
chmod -R 777 /usr/local/elasticsearch/plugins/ik
使用xftp将文件拷贝到服务器的上述路径之后,解压
//解压
unzip elasticsearch-analysis-ik-7.16.2.zip
//完事之后,删除压缩包
rm -rf elasticsearch-analysis-ik-7.16.2.zip
停止上面那篇博客创建的容器并删除
docker stop 容器ID/容器名
docker rm 容器ID/容器名
重新创建容器服务运行
docker run -itd -p 9200:9200 -p 9300:9300 -p 5601:5601 \
-v /usr/local/elasticsearch/config/jvm.options:/home/elasticsearch/elasticsearch-7.16.2/config/jvm.options \
-v /usr/local/elasticsearch/config/elasticsearch.yml:/home/elasticsearch/elasticsearch-7.16.2/config/elasticsearch.yml \
-v /usr/local/elasticsearch/data:/home/elasticsearch/elasticsearch-7.16.2/data \
-v /usr/local/elasticsearch/plugins://home/elasticsearch/elasticsearch-7.16.2/plugins \
--name EsKibana nshou/elasticsearch-kibana
查看插件
http://IP:9200/_cat/plugins
测试IK分词器
使用kibana的Dev Tools工具来测试IK分词器
http://IP:5601/app/dev_tools#/console
IK提供了两种分词算法: ik_smart和ik_max_word
ik_smart:最少切分
请求一个分词器,填好分词要求
GET _analyze
{
"analyzer": "ik_smart",
"text": "搜索引擎"
}
ik_max_word: 最多切分
GET _analyze
{
"analyzer": "ik_max_word",
"text": "搜索引擎"
}
不过这也是看你输入的text来的,有时候最少切分和最多切分的结果差不多
像如下句子就切分得差不多,当是一个名词的时候,像上面那样好像就切分的区别大一些
GET _analyze
{
"analyzer": "ik_smart",
"text": "我来试试这个切分算法"
}
GET _analyze
{
"analyzer": "ik_max_word",
"text": "我来试试这个切分算法"
}
自定义词典
分词算法毕竟是算法,不可能穷尽所有我们的需求。
有些我们自己的土话可能就不需要IK分词器将它分割开
如下例子不管使用那个算法都分开了
GET _analyze
{
"analyzer": "ik_smart",
"text": "三克油"
}
GET _analyze
{
"analyzer": "ik_max_word",
"text": "三克油"
}
所以我们要自定义一个三克油的词来让IK分词器别把他们分割开了
在如下目录下有着相应的配置文件
plugins/ik/config
下面.dic后缀的都是字典
我们随便进一个main.dic看看,可以看见都是词语
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>
<!--用户可以在这里配置自己的扩展字典,对应着config目录下面的一个文档名,我这里定义为了ext_dict -->
<entry key="ext_dict">ext_dict.dic</entry>
<!--用户可以在这里配置自己的扩展停止词字典-->
<entry key="ext_stopwords"></entry>
<!--用户可以在这里配置远程扩展字典 -->
<!-- <entry key="remote_ext_dict">words_location</entry> -->
<!--用户可以在这里配置远程扩展停止词字典-->
<!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>
并在config 这个目录下面新建一个ext_dict.dic文件
将自定义的词语放进去
修改文件之后,我们需要重启ElasticSearch
docker restart 容器ID/容器名
再次使用kibana 的dev tools ,不管那个算法策略都有三克油这个词
GET _analyze
{
"analyzer": "ik_smart",
"text": "三克油"
}
GET _analyze
{
"analyzer": "ik_max_word",
"text": "三克油"
}