一、背景
1、同义词
指意义相同的一组词语,意义相同的同义词也叫等义词。
2、近义词
指词汇意义相同或相近的词语。
如“美好”和“美妙”、“懒惰”和“怠惰”、“枯萎”和“干枯”、“宽敞”和“宽阔”。
与“近义词”意思相近的词为“同义词”。
3、实际业务场景
搜索“苹果”关键字,可能想购买吃的“苹果”,也可能想购买“苹果手机”、“iphone13”
二、技术实现方案
- Elasticsearch:实现搜索系统
- IK分词器:实现商品名称的自动分词。例:“史上最强iphone13Pro” → “史上”、“最强”、“史上最强”、“iphone”、“13”、“Pro”、“13Pro”、“iphone13” 等
- elasticsearch-analysis-dynamic-synonym 插件:同义词热更新插件,支持本地文件更新,http远程文件更新
三、下载地址
- ES下载地址:https://www.elastic.co/cn/downloads/elasticsearch
- IK分词器下载地址:https://github.com/medcl/elasticsearch-analysis-ik/releases
- elasticsearch-analysis-dynamic-synonym 插件GitHub: https://github.com/bells/elasticsearch-analysis-dynamic-synonym
- ES-Head下载地址(谷歌商店也可以搜索到这个插件):https://github.com/mobz/elasticsearch-head
四、同义词语法
双十一,双11=>购物节
中秋,月饼=>中秋节
iphone,苹果手机,iphone13Pro
小米,小米手机
小米,小米电脑
一行一个同义词,其中:
AA,BB=>CC,会将AA与BB都映射成CC,然后只对CC进行文档索引
AA,BB,会索引AA还会索引BB
如果一个词在多行中出现,那么会进行累计
五、参考文档
- ES官方网站,同义词:
https://www.elastic.co/guide/en/elasticsearch/reference/2.3/analysis-synonym-tokenfilter.html
https://www.elastic.co/guide/cn/elasticsearch/guide/current/synonyms.html - 知乎大佬文章:https://zhuanlan.zhihu.com/p/381936025
- 知乎大佬踩坑总结:https://zhuanlan.zhihu.com/p/268169068
六、具体实现
1、创建索引时指定同义词
2、创建同义词文本维护同义词
3、采用analysis-dynamic-synonym插件,动态文件的方式同步同义词
4、采用analysis-dynamic-synonym插件,动态接口的方式同步同义词
5、改造analysis-dynamic-synonym源码访问远程数据库