如何自动排除推荐算法中已访问过的项目?

时间:2010-01-18 10:16:00

标签: algorithm recommendation-engine

我现在正在使用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;

1 个答案:

答案 0 :(得分:1)

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

例如:

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

这在我看过的所有MySQL版本中都可用,虽然手册中的部分编号在旧版本中有所不同。

编辑以回应OP的评论:

  1. 好的...... SELECT id FROM t1 WHERE ... AND NOT id IN (SELECT seen_id FROM user_seen_ids where user = ? )之类的东西怎么样。此表单避免了必须在SQL语句中传递数千个ID。

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