2011-06-29 46 views
1

为登录用户提供个性化搜索结果的一些技巧是什么?我能想到的一种方式是分析用户的浏览记录。基于历史记录的个性化搜索结果

跟踪:用户的活动(如浏览页面和点击“喜欢”按钮的日志可用于偏好搜索结果。

问题1:您如何跟踪用户的浏览记录?列表user_id,number_of_hits, page id?如果我每天有1000位访问者,每个浏览平均10页,那么每次需要个性化推荐时,是否会有大量记录到select?这张桌子每月将增长30万行!每次执行搜索时,这些行需要更长和更长的时间。 我猜表格'喜欢'将采取相同的表设计

问题2:您如何偏见搜索结果?例如,如果用户一直在搜索苹果产品,搜索引擎realise如何让用户喜欢苹果产品并随后将搜索偏向他们?标记页面并在浏览的页面上累积标记记录?

回答

0

您可能不希望使用关系数据库来处理这种类型的事情,请查看mongodb或cassandra。那是因为你基本上想要为用户的历史添加一个新的列,所以列式数据库更有意义。

0

每月300k行并不是那么多,实际上这几乎没有。如果您为此使用关系数据库或非关系数据库,则无关紧要。

简单的方法如下:

  1. 放条目到表/集是这样的:

    时间戳,用户行为,杂项信息

(确保您尽可能多地输入信息,以便您不需要将此数据仓库表与任何其他表一起加入)

  1. 分区由时间戳(每月一个分区)

  2. 决不会违背这个表直接,而不是有说,每天报告作业运行在所有的数据,收集并计算所需的统计数据,并将其写入汇总表。

  3. 反映在您的报告查询,并把相应的分区的本地索引

  4. 只有违背汇总表从您的web前端

+0

至于第二个问题,标记网页只会在最简单的情况下起作用。更好的方法是在历史记录表上运行关联规则挖掘算法(如频繁项目集/先验)以找出页面/用户等之间的依赖关系...然后将搜索结果偏向最重要的项集(例如。信心和支持是有效的) – Mario

+0

所有这些对我来说都是新的,这可以在mysql中完成吗?你知道关于这个的任何教程吗? – Nyxynyx

+0

它不是真的很难: 分区:你想要的是范围分区(http://dev.mysql.com/doc/refman/5.1/en/partitioning-range.html) 索引:一个简单的B树索引(在表名(时间戳)上创建索引idxname)。在mysql中,所有索引默认都是本地分区(与oracle不同)。 至于报表/挖掘工作,您有两种选择,可以是预定作业(http://dev.mysql.com/doc/refman/5.1/en/events-overview.html),也可以在数据库,即检索必要的行并脱机运行算法,并将结果返回到数据库中。取决于你的情况。 – Mario

0

如果只保存最近的X结果,而不是一切,它可能是可行的。可能会减慢速度,但它会奏效。任何时候你写更多的数据和阅读更多的数据,都会产生影响。正确的DBA方法(如索引和查询优化)可以提供帮助,但不管您使用什么,都会产生影响。

我个人认为只需在数据库中存储用户的默认视图并使用会话来跟踪其余部分。当然,当你登录时不会有历史记录。但是,您可以利用这些优势来突出显示您认为对引导用户来说很重要或相关的一组特殊页面。一个突出的系统的种类。更快,更简单,更人性化。

至于偏差,你可以为每个记录和数组编写一组关键字来相应地对它们进行排序。使用PHP不会非常困难。

0

我每月使用MySQL和2M以上的记录(页面浏览量),我们每天和每天都在该表上运行报告。

该表按月分区(如已建议)并在需要时编制索引。

我也通过创建一个名为“page_view_YYMM”新表(YY =年,MM =月),并使用一些必要时

关于第二个问题,工会是超过6个月的数据清理桌子时,这样我会接近它是用你的产品列表中创建一个表,它是一个简单的:

url, description 

说明将标签剥去你的页面或项目(的内容取决于你如何想影响搜索),然后在描述中添加一个全文索引,并在该表上添加一个搜索,添加您一直在收集的可能的额外条款用户正在浏览您认为相关的网站(例如,类别名称或品牌)