主流电商平台有一个很常见的功能:“猜你喜欢”智能推荐,对用户做了精准画像,算法复杂,而普通的项目中,因为内容规模有限,便用 ElasticSearch 基本可以实现基础需求
在我们开发的 店熵SAAS平台(shopfai.com)项目中使用了本文中的方案,比较稳定,用户体验还不错。
实现思路:
- 访问某个商品时,提取此商品的关键词,写入ES 历史关键词(索引名示例:history_keywords)
- 聚合ES 历史关键词 中的所有关键词,提取出现最多的前几个
- 用提取出这几个关键词再次查询商品,作为“猜你喜欢” 推荐结果
- ES 历史关键词 需要控制总数量,只保存最近访问的数据,可以用Redis实现一个循环记数器,计数器的值作为ES记录的ID写入,实现ES数据的循环写入,这个数量取多少合适,跟据具体项目调整优化,1000亦可,10000亦可,会直接影响推荐结果
- 聚合 ES历史关键词时 ,具体取几个需实际优化调整,我们项目中取了 10 个
- 当用户首次访问时,尚无历史关键词数据,这时候可以取 “热搜词”(热搜词功能需另外实现)
文章图片
核心的 ES 查询语法: 提取商品名称里的关键词:
POST /_analyze
{
"tokenizer" : "ik_smart",
"text": "商品名称ABC"
}
因为不同语言封装方法不同,这里只贴了 原生 诘法,分词器中文用了ik_smart,根据具体情况调整
从历史关键词中提取出现最多的前几个:
POST /history_keywords
{
"size":0,
"query":{
"bool":{
"filter":[
{
"term":{
"user_id":"123"
}
}
]
}
},
"aggs":{
"topN":{
"terms":{
"field":"keyword",
"size":10
}
}
}
}
history_keywords 里只有两个字段 用户ID(user_id),关键词(keyword)
最后,用这几个关键词查询商品,代码不贴了。
【用 ElasticSearch 实现 “猜你喜欢” 智能推荐】本文原始网址:https://www.liu12.com/article/es-guess-you-like,转载请保留出处
推荐阅读
- java|ES中解决模糊搜索的时候搜索一个中文可以,两个以上中文就不行的情况
- 笔记|使用es实现个人博客的模糊搜索,搜索推荐
- elasticsearch|Elasticsearch 参数优化
- elasticsearch api 调用
- ES时序数据过期处理
- 开发技能点|Elasticsearch概述
- Elasticsearch 在地理信息空间索引的探索和演进
- elasticsearch修改索引
- ES之Lucene中的段文件