什么是分词器
分词器就是把一个文档切分成词语,在分词之后es才能建立倒排索引
es内置了多种分词器,但是如果要中文分词,需要自己安装中文的分词器
IKAnalyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。
安装IK分词器
可以使用elasticsearch的插件管理elasticsearch-plugin来自动安装
下载地址:https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.3.0/elasticsearch-analysis-ik-7.3.0.zip
执行安装命令
/usr/elasticsearch/bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.3.0/elasticsearch-analysis-ik-7.3.0.zip
它会先下载,然后弹框输入y完成安装
安装完成后重启elasticsearch和kibana
IK分词器的模式
- ik_max_word:细粒度拆分
- ik_smart:粗粒度的拆分
在kibana中测试
使用扩展词典
扩展词:就是不想让哪些词被分开,在分词器分词的时候让他们分成一个词。
自定义扩展词库
进入analysis-ik
cd /usr/elasticsearch/config/analysis-ik/
新增自定义扩展词词典,写入:要有梦
vim test_ext_dict.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>
<!--用户可以在这里配置自己的扩展字典 -->
<entry key="ext_dict">test_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>
重启elasticsearch
在kibana中测试扩展词
使用停用词典
新增自定义停用词词典,写入:要有
路径:/usr/elasticsearch/config/analysis-ik/
vim test_stop_dict.dic
查看一下
添加到IKAnalyzer.cfg.xml配置中
重启elasticsearch
<要有>这个词已经没有了
配置同义词
路径:/usr/elasticsearch/config/analysis-ik/
创建同义词文件synonym.txt
vim synonym.txt
写入:china,中国
然后不做更改直接重启elasticsearch
进入kibana使用同义词创建索引
PUT /testsynonym
{
"settings": {
"analysis": {
"filter": {
"word_sync": {
"type": "synonym",
"synonyms_path": "analysis-ik/synonym.txt"
}
},
"analyzer": {
"ik_sync_max_word": {
"filter": [
"word_sync"
],
"type": "custom",
"tokenizer": "ik_max_word"
},
"ik_sync_smart": {
"filter": [
"word_sync"
],
"type": "custom",
"tokenizer": "ik_smart"
}
}
}
},
"mappings": {
"properties": {
"name": {
"type": "text",
"analyzer": "ik_sync_max_word",
"search_analyzer": "ik_sync_max_word"
}
}
}
}
然后插入一条数据
使用china搜索