Elasticsearch默认也能对中文进行分词。但是是按照每个字进行分词的,这种在实际应用里肯定达不到想要的效果,因此,我们安装ik分词器来进行中文分词。
1:ES内置的Analyzer分析器
ES自带了许多内置的Analyzer分析器,无需配置就可以直接在index中使用:
- 标准分词器(standard):以单词边界切分字符串为terms,根据Unicode文本分割算法。它会移除大部分的标点符号,小写分词后的term,支持停用词。
- 简单分词器(simple):该分词器会在遇到非字母时切分字符串,小写所有的term。
- 空格分词器(whitespace):遇到空格字符时切分字符串,
- 停用词分词器(stop):类似简单分词器,同时支持移除停用词。
- 关键词分词器(keyword):无操作分词器,会输出与输入相同的内容作为一个single term。
- 模式分词器(pattern):使用正则表达式讲字符串且分为terms。支持小写字母和停用词。
- 语言分词器(language):支持许多基于特定语言的分词器,比如english或french。
- 签名分词器(fingerprint):是一个专家分词器,会产生一个签名,可以用于去重检测。
自定义分词器:如果内置分词器无法满足你的需求,可以自定义custom分词器,根据不同的character filters,tokenizer,token filters的组合 。例如IK就是自定义分词器。
2:安装ik分词器
#首先需要启动elasticsearch容器
#然后进入elasticsearch容器
docker exec -it elasticsearch /bin/bash
#列出所有文件
ls
LICENSE.txt NOTICE.txt README.asciidoc bin config data jdk lib logs modules plugins
#进入plugin目录
cd plugins/
#安装ik分词器,注意和elasticsearch版本对应
elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.6.2/elasticsearch-analysis-ik-7.6.2.zip
#重启下容器
docker restart elasticsearch
#查看当前目录下文件
ls
analysis-ik
cd analysis-ik/
ls
commons-codec-1.9.jar commons-logging-1.2.jar elasticsearch-analysis-ik-7.6.2.jar httpclient-4.5.2.jar httpcore-4.4.4.jar plugin-descriptor.properties plugin-security.policy
IK支持两种分词模式:
ik_max_word: 会将文本做最细粒度的拆分,会穷尽各种可能的组合
- ik_smart: 会做最粗粒度的拆分
验证分词插件是否安装成功
增加一个叫test001的索引
成功返回 {“acknowledged”:true,”shards_acknowledged”:true,”index”:”test001”}curl -X PUT http://localhost:9200/test001