【问题标题】:How to automatically exclude items already visited in recommendation algorithm?如何自动排除推荐算法中已经访问过的项目?
【发布时间】:2010-01-18 10:16:00
【问题描述】:

我现在使用slope One 进行推荐。

如何从结果中排除访问过的项目?

我不能简单地通过not in (visited_id_list) 来过滤那些访问过的,因为这对于老用户来说会存在可扩展性问题!

我想出了一个没有not in的解决方案:

select b.property,count(b.id) total from propertyviews a
                                         left join propertyviews b on b.cookie=a.cookie
                                         left join propertyviews c on c.cookie=0 and b.property=c.property
                                         where a.property=1 and a.cookie!=0 and c.property is null
                                         group by b.property order by total;

【问题讨论】:

  • 你是在 SQL 中实现这个吗?如果没有,您的数据是如何存储的?如果您要提取所有数据,对其进行处理,然后将其呈现出来……那么您将遇到更大的问题。
  • 是的,我正在 MySQL 中实现它。

标签: algorithm recommendation-engine


【解决方案1】:

说真的,如果您使用的是 MySQL,请查看 12.2.10.3. Subqueries with ANY, IN, and SOME

例如:

SELECT s1 FROM t1 WHERE s1 IN    (SELECT s1 FROM t2);

这在我查看的所有 MySQL 版本中都可用,尽管手册中的章节编号在旧版本中有所不同。

EDIT回应OP的评论:

  1. 好的......像SELECT id FROM t1 WHERE ... AND NOT id IN (SELECT seen_id FROM user_seen_ids where user = ? ) 这样的东西怎么样。这种形式避免了在 SQL 语句中传递数千个 id。

  2. 如果您想完全避免查询的“针对 id 列表进行测试”部分,我看不出它在理论上是如何实现的,更不用说您将如何实现它了。

【讨论】:

    猜你喜欢
    • 2017-08-19
    • 1970-01-01
    • 2017-01-31
    • 1970-01-01
    • 1970-01-01
    • 2012-08-06
    • 1970-01-01
    • 2012-11-29
    • 1970-01-01
    相关资源
    最近更新 更多