这里只说明一下这次在使用 Elasticsearch 中用到的插件的安装与使用,本次只介绍IK分词、动态同义词插件的安装
一、准备工作
- IK Analysis for Elasticsearch :https://github.com/medcl/elasticsearch-analysis-ik
- Dynamic Synonym for ElasticSearch: https://github.com/bells/elasticsearch-analysis-dynamic-synonym
注意:插件的跟Elasticsearch的版本兼容很重要,一定要根据Elasticsearch的版本,选择合适版本的插件
二、IK分词器的安装与使用
安装
IK分词的安装简易采用这种方式安装,避免自己编译遇到各种问题,在节点的根目录下执行下面的命令:
1 | ./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/downloa d/v6.3.1/elasticsearch-analysis-ik-6.3.1.zip |
这样就可以直接安装好,不需要我们自己编译
使用
这里直接采用GitHub上提供的例子使用:(以下的语句直接复制到kibana的dev tools 上执行就可以了)
1、创建索引
1 | curl -XPUT http://localhost:9200/index |
2、创建mapping
1 | curl -XPOST http://localhost:9200/index/fulltext/_mapping -H 'Content-Type:application/json' -d' |
3、添加一个数据(即文档)
1 | curl -XPOST http://localhost:9200/index/fulltext/1 -H 'Content-Type:application/json' -d' {"content":"美国留给伊拉克的是个烂摊子吗"} |
4、查询并高亮显示
1 | curl -XPOST http://localhost:9200/index/fulltext/_search -H 'Content-Type:application/json' -d' |
5、不同的分词效果
ik_max_word: 会将文本做最细粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,中华 人民,中华,华人,人民共和国,人民,人,民,共和国,共和,和,国国,国歌”,会穷尽各种可能的组合;
ik_smart: 会做最粗粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,国歌”。
1 | GET /_analyze?pretty=true |
1 | GET /_analyze?pretty=true |
1 | GET /_analyze?pretty=true |
分别运行后查看结果
三、动态同义词插件的安装与使用
安装Dynamic Synonym for ElasticSearch
选择6.3.1:https://github.com/bells/elasticsearch-analysis-dynamic-synonym/archive/master.zip
解压该文件:(注意这里先不要将文件解压到Elasticsearch的plugins下面
1 | unzip -o -d /usr/local/ master.zip |
解压之后,进入解压文件夹,就会发现有几个文件,其中有个文件是pom.xml,这就是我们要编译的地方,直接在当前的文件夹下运行:
1 | mvn package |
之后就耐心的等着,估计要编译一会,编译过程如果有报错,根据报错信息予以解决 编译成功后,就会发现文件夹中多了几个文件,其中有个target文件夹
1 | cd target/releases/ |
进到这个文件夹,就会发现有这样一个压缩包:elasticsearch-analysis-dynamic-synonym-{version}.zip
在elasticsearch节点的plugins文件夹下新建dynamic-synonym文件夹,然后将该文件解压到该文件夹下:
1 | unzip -o -d /usr/local/elasticsearch/elasticsearch-6.3.1-node-1/plugins/dynamic-synonym/ elasticsear ch-analysis-dynamic-synonym-{version}.zip |
解压完之后,去/plugins/dynamic-synonym/查看,发现dynamic-synonym这个文件夹下还包含一个文件夹,再下一级才是我们需要的,因此需要将该文件夹下的所有文件全部复 制到dynamic-synonym即可
重启elasticsearch服务
**注意:**上面说的插件,每个节点都是要安装的,安装的步骤是一样的
使用
1 | PUT /publishbuyersinfo |
上面设置好之后,就可以配置分析器和过滤器了
1 | PUT /publishbuyersinfo/_mapping/product |
其中synonym.txt文件的规则要求:
a)、文件的格式非常重要
文件的格式必须是utf-8,有时候会同ftp下载下来直接用记事本打开,修改完之后直接上传就会有问题
b)、同义词配置的格式
格式1:
1 | a,b => c |
在分词的时候,a,b都会解析成为c,然后把c存入索引中
格式2:
1 | a,b,c |
在分词的时候,有a的地方,都会解析成a,b,c,把a,b,c存入索引中
相比之下格式1有个主词,比较省索引
这里有几个坑,有必要单独拎出来说一下:
-
配置的内容中,如果有大写,一律要写成小写,大写是没有作用的,当然,只是写成小写而已,用户 输入大写或者文档中有大写的,照样可以命中的;
-
远程词库
http://host:port/synonym.txt
在配置的时候一定要注意,初始化的时候,文件中一定要有内容,可以随便先写进去一组同义词,否则 在后面创建文档的时候就会报错:
1
fst must be non-nul
这块的文档太少了,查了很久才解决,初始化synonym.txt内容之后,记得先重启Elasticsearch服务,后面更新了这个文件之后就不需要再重启了,就会根据设置的频率自动同步生效
检验是否生效就很简单了,插入几条数据,搜索同义词,看看相关产品能否出来即可。
**附:**参考文档
https://blog.csdn.net/wwd0501/article/details/78259784
https://www.cnblogs.com/shaner/p/6428961.html
如果您喜欢此博客或发现它对您有用,则欢迎对此发表评论。 也欢迎您共享此博客,以便更多人可以参与。 如果博客中使用的图像侵犯了您的版权,请与作者联系以将其删除。 谢谢 !