愚者求师之过,智者从师之长。

ElasticSearch 联想词问题

Elasticsearch | 作者 sage | 发布于2017年05月10日 | 阅读数:10747

本人做电商的,现做搜索这块,如何实现在输入框中输入“手机”就会提示手机壳,手机膜,手机套,手机内存卡等等。我自己是根据productName去检索的,但是我的商品的名称很长比如“中国的荣耀国人的手机4g内存最低价3200元赠送手机壳”。所以如果搜手机的话就会先很长的一段,不像京东天猫那样,就简短的几个字。求大神指点!不胜感激!
QQ截图20170510233758.png
已邀请:

huigy

赞同来自:

同问

wengqiankun - es新手

赞同来自:

比较常用的两个方法:
一个是建词典,根据 输入词和词典的关联显示下拉词
另一个手机搜索记录,根据搜索词推荐用户使用最多的搜索词
 
然后就是业务优化的问题了

feiyalun

赞同来自:

兄弟 不知道你这个解决了么

Jinyang Zhou - 菜鸡如我

赞同来自:

我之前做这个问题的时候有两个办法:

1. 用 trie tree 来实现,脱离 ES。搜索建议的来源是你自己的搜索 log,或者是业务的文本。
2. 用 ES 检索,但是检索出现的问题就是你刚才说的有的比较长的会排在前面,这些排在前面的出现的根本问题是排序不合理,所以你可以用 script 重新排序,比如自己再创建一个 fields 来表示这个长度,然后算分的时候,用(99999-长度)*原始分,或者取负值*原始分这样,通过这样的方法来干扰原生的 BM25 排序。

trycatchfinal

赞同来自:

添加一个字段代表商品名称的长度,搜索的时候添加一个阈值,行不行?

UnigroupAi - 高级Elasticsearch工程师

赞同来自:

如果说你想把库里存的很长的字段联想出来,这属于精确联想,跟你说的京东淘宝并不匹配。京东淘宝都是有自己的联想词库,一方面是建词典,一方面是热搜。像输入苹果一般匹配的都是iphone。我做的是类似百度,支持拼音等丰富联想,要把多个分词器组合使用。具体的是把一个字段根据不同分词进行不同处理,从而实现不同需求的联想匹配。

Tyler

赞同来自:

可以参照美团的关键字联系来做
通过业务层面抽取比较流行和转化好的关键字来单独建立联想词索引,然后用 prefix term 来查询联想词索引
[搜索引擎关键字智能提示的一种实现](https://tech.meituan.com/pinyin-suggest.html)

要回复问题请先登录注册