商城项目中 ES 搜索怎么进行分词优化?

查看 114|回复 13
作者:3country   
公司做的商城项目,搜索商品用的 es ,分词器使用的 ik ,在使用 ik_max_word 做搜索的时候查询结果会有些问题
比如一个商品是 XL 汤锅,搜索锅是查询不到的
某个商品为 XX 护关节钙片,搜索护肝是可以搜索到的(运营的意思是应该搜索不到)
有大佬给支个招吗?
sss15   
第一个问题,不知道
按照我的理解 ik_max_word 会将词拆分到最细,所以 XL 汤锅,理应通过锅能搜索到的,插个眼看个答案。
第二个问题
护肝 2 个字应该是搜索词也被分词了,所以护肝被拆成了护和肝 ,这个可以通过 2 种方式解决,一种是用 keyword 进行搜索,这样搜索词不会被分词。 另外一种是指定搜索词的分词器为 ik_smart 这样分的词会尽量的少
ghostwind   
1. 第一个问题的话,你看下是不是汤锅变成了一个实体词。
2. 之前我们做的时候是 case by case 你把护肝作为一个实体词,不允许拆分。
PS:单字的搜索可以不优化,因为不准
3country
OP
  
@sss15 其实原因就是汤锅没给分词,搜索锅搜索不到,护肝给分成了护和肝
wu00   
es 也有 explain 的自己看一下就知道了
另外查询时最好也要指定分词器,比如你的关键词是”护肝”,用 A 分词器能分出 3 个词,B 分词器分出 1 个
1 ,ik_max_word 也无法将"汤锅"拆分出“锅”,自己用_analyze 试下就知道了
2 ,ik_max_word 可将“护肝”拆分成“护”和“肝”,需要自行维护词库
3country
OP
  
@wu00 对于这种场景各大电商平台也是自己维护词库吗?还是说有自研之类的
996635   
关键词:HMM
wu00   
大厂咱不知道,肯定没这么简单,应该有搜索引擎团队。
你这种针对分词器维护一下行业词库,最多再做做 BM25 相关度调优就差不多了..
3country
OP
  
@wu00 BM25 相关度调优是指什么?
zakokun   
ES 支持指定 tokenizer 做分词测试,你可以指定你们线上用的 tokenizer ,然后把商品名称输入进去,查看返回分词结果.
按照你给的例子,第一个情况是分词器把你“汤锅”作为一整个 token ,所以用“锅”搜不到;
第二个情况是分词器拆分出“护”这个 token ,然后你的关键词也拆出了“护”,所以匹配到了。
规则和搜索匹配方式都需要开发自己去指定,包括匹配度,还有分词器,停用词,词库什么的,要和产品商量好。
您需要登录后才可以回帖 登录 | 立即注册

返回顶部