ElasticSearch搜索优化主要通过三个方面:
- 定制化分词器
- 同义词扩展
- 相关性重塑
定制化分词器
对于中文分词器,我们一般使用的是elasticsearch-analysis-ik
,当然也可以在现成的分词器上加一些定制化的改造,让分词器更加“智能”。
1.创建dic文件
在es的node1节点创建myword.dic
文件
然后将文件复制到其余的两个节点
2.修改es配置文件
IKAnalyzer.cfg.xml
1 | <?xml version="1.0" encoding="UTF-8"?> |
将文件复制到其余的两个节点
3.热更新词库
1 | <entry key="ext_dict">http://yoursite.com/getCustomDic</entry> |
Http请求需要返回两个头部,last-modified和etag
两者任何一个发生变化会重新更新,ik一分钟检测一次
同义词扩展
同义词:
语义相近或相同
品牌类目关联
搜索它等于搜索它
1.创建同义词文件
在集群的各节点上的该路径elasticsearch\elasticsearch-node3\config\analysis-ik
加上同义词文件
2.建立es索引
1 | #加入同义词 |
3.同步数据
通过logstash将数据同步到es中
1 | logstash -f mysql/jdbc.conf |
4.测试
分词测试:
1 | GET /shop/_analyze |
索引测试:
1 | GET /shop/_search |
相关性重塑
什么是相关性:https://www.elastic.co/guide/cn/elasticsearch/guide/current/relevance-intro.html
相关性搜索
让搜索引擎理解语义
影响召回及排序
重新构建es索引
采取词性影响召回策略模型 通过category_id
引入Java代码:
构造分类:
1 | private Integer getCategoryIdByToken(String token) { |
在构造分词函数识别器时调用getCategoryIdByToken
方法
1 | /** |