ElasticSeaarch安装ik分词器
一个tokenizer(分词器)接收一个字符流,将之分割为独立的tokens(词元,通常是独立的单词),然后输出tokens流。例如:whitespace tokenizer遇到空白字符时分割文本。它会将文本“Quick brown fox!”分割为[Quick,brown,fox!]。该tokenizer(分词器)还负责记录各个terms(词条)的顺序或position位置(用于phrase短语和word proximity词近邻查询),以及term(词条)所代表的原始word(单词)的start(起始)和end(结束)的character offsets(字符串偏移量)(用于高亮显示搜索的内容)。
elasticsearch提供了很多内置的分词器,可以用来构建custom analyzers(自定义分词器)。
关于分词器: https://www.elastic.co/guide/en/elasticsearch/reference/7.6/analysis.html
使用内置分词器
1 |
|
执行结果:
1 | { |
1、安装ik分词器
所有的语言分词,默认使用的都是“Standard Analyzer”,但是这些分词器针对于中文的分词,并不友好。为此需要安装中文的分词器。
注意:不能用默认elasticsearch-plugin install xxx.zip 进行自动安装
https://github.com/medcl/elasticsearch-analysis-ik/releases/download 对应es版本安装
(1)查看elasticsearch版本号:
1 | [root@hadoop-104 ~]# curl http://localhost:9200 |
(2)进入es容器内部plugin目录
- docker exec -it 容器id /bin/bash
1 | [root@hadoop-104 ~]# docker exec -it elasticsearch /bin/bash |
1 | [root@0adeb7852e00 elasticsearch]# pwd |
- unzip 下载的文件
1 | [root@0adeb7852e00 elasticsearch]# unzip elasticsearch-analysis-ik-7.6.2.zip -d ink |
- rm -rf *.zip
1 | [root@0adeb7852e00 elasticsearch]# rm -rf elasticsearch-analysis-ik-7.6.2.zip |
确认是否安装好了分词器
2、测试分词器
接下来使用ik分词器对中文语句进行测试。
使用默认分词器给中文分词
1 | GET my_index/_analyze |
执行结果:
1 | { |
使用ik分词器的ik_smart
1 | GET my_index/_analyze |
输出结果:
1 | { |
使用ik分词器的ik_max_word
1 | GET my_index/_analyze |
输出结果:
1 | { |
3、自定义词库
- 修改/usr/share/elasticsearch/plugins/ik/config中的IKAnalyzer.cfg.xml
/usr/share/elasticsearch/plugins/ik/config
1 |
|
原来的xml
1 |
|
修改完成后,需要重启elasticsearch容器,否则修改不生效。
更新完成后,es只会对于新增的数据用更新分词。历史数据是不会重新分词的。如果想要历史数据重新分词,需要执行:
1 | POST my_index/_update_by_query?conflicts=proceed |
http://192.168.137.14/es/fenci.txt,这个是nginx上资源的访问路径
在运行下面实例之前,需要安装nginx(安装方法见安装nginx),然后创建“fenci.txt”文件,内容如下:
1 | echo "樱桃萨其马,带你甜蜜入夏" > /mydata/nginx/html/fenci.txt |
测试效果:
1 | GET my_index/_analyze |
输出结果:
1 | { |