用 ElasticSearch 实现 “猜你喜欢” 智能推荐

主流电商平台有一个很常见的功能:“猜你喜欢”智能推荐,对用户做了精准画像,算法复杂,而普通的项目中,因为内容规模有限,便用 ElasticSearch 基本可以实现基础需求

在我们开发的 店熵SAAS平台(shopfai.com)项目中使用了本文中的方案,比较稳定,用户体验还不错。

实现思路:

  1. 访问某个商品时,提取此商品的关键词,写入ES 历史关键词(索引名示例:history_keywords)
  2. 聚合ES 历史关键词 中的所有关键词,提取出现最多的前几个
  3. 用提取出这几个关键词再次查询商品,作为“猜你喜欢” 推荐结果

几个核心控制点:

  1. ES 历史关键词 需要控制总数量,只保存最近访问的数据,可以用Redis实现一个循环记数器,计数器的值作为ES记录的ID写入,实现ES数据的循环写入,这个数量取多少合适,跟据具体项目调整优化,1000亦可,10000亦可,会直接影响推荐结果
  2. 聚合 ES历史关键词时 ,具体取几个需实际优化调整,我们项目中取了 10 个
  3. 当用户首次访问时,尚无历史关键词数据,这时候可以取 “热搜词”(热搜词功能需另外实现)

简化流程图:

核心的 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 实现 “猜你喜欢” 智能推荐,转载请保留出处

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Elasticsearch是一种流行的搜索引擎,可以用于实现推荐功能。 推荐系统通常是基于用户行为和偏好来生成推荐列表的。下面是一些步骤来实现使用Elasticsearch实现推荐功能的示例: 1. 收集用户数据:收集用户行为历史和偏好,例如搜索历史、购买历史、查看历史和评级等。 2. 创建索引:使用Elasticsearch创建索引,包括用户数据和产品目录数据。 3. 编写查询:编写查询来检索相关的产品,例如使用用户搜索历史和偏好来查找与用户兴趣相关的产品。 4. 实现推荐算法:使用机器学习算法(如协同过滤或内容过滤)来根据用户行为和偏好生成推荐列表。 5. 过滤和排序:使用Elasticsearch的过滤和排序功能来过滤和排序生成的推荐列表,以确保最终推荐列表与用户的兴趣相关。 示例代码: ```python # 创建索引 PUT /users { "mappings": { "properties": { "user_id": {"type": "integer"}, "search_history": {"type": "text"}, "purchase_history": {"type": "text"}, "view_history": {"type": "text"}, "ratings": {"type": "float"} } } } PUT /products { "mappings": { "properties": { "product_id": {"type": "integer"}, "product_name": {"type": "text"}, "description": {"type": "text"}, "category": {"type": "text"}, "price": {"type": "float"} } } } # 编写查询 GET /products/_search { "query": { "bool": { "should": [ {"match": {"product_name": "laptop"}}, {"match": {"description": "gaming"}}, {"match": {"category": "computers"}} ] } } } # 实现推荐算法 POST /users/_search { "query": { "more_like_this": { "fields": ["search_history", "purchase_history", "view_history"], "like": "iphone", "min_term_freq": 1, "max_query_terms": 12 } } } # 过滤和排序 GET /products/_search { "query": { "bool": { "must": [ {"match": {"category": "computers"}}, {"range": {"price": {"gte": 500, "lte": 2000}}} ] } }, "sort": [ {"price": {"order": "asc"}}, "_score" ], "size": 10 } ``` 以上是一个简单的使用Elasticsearch实现推荐系统的示例,你可以根据具体需求进行调整和修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值