为登录用户提供个性化搜索结果的一些技巧是什么?我能想到的一种方法是分析用户的浏览历史。
跟踪:用户的活动记录,例如查看的网页和点击的“赞”按钮可用于偏向搜索结果。
问题1 :您如何跟踪用户的浏览记录?列user_id
,number_of_hits
,page id
的表格?如果我每天有1000个访问者,平均每个浏览10个页面,那么每次需要个性化推荐时,select
会有大量记录吗?该表每月将增长30万行!每次搜索时,select
行需要更长和更长的时间。 我想用于录制“喜欢”的表将使用相同的表格设计。
问题2: 您如何偏向搜索结果?例如,如果用户一直在搜索苹果产品,那么用户喜欢苹果产品的搜索引擎realise
如何将搜索偏向于它们?标记页面并在访问的页面上累积标记记录?
答案 0 :(得分:0)
您可能不希望将关系数据库用于此类事情,请查看mongodb或cassandra。那是因为你基本上想要在用户的历史记录中添加一个新列,以便面向列的数据库更有意义。
答案 1 :(得分:0)
每月300k行并不是那么多,事实上,这几乎没有。如果您为此使用关系数据库或非关系数据库,则无关紧要。
直截了当的方法如下:
将条目放入表/集合中,如下所示:
时间戳,用户,操作,错误信息
(确保您提供尽可能多的信息,这样您就不需要将此数据仓库表与任何其他表一起加入)
按时间戳分区(每月一个分区)
永远不会直接违反此表,而是说每日报告作业在所有数据上运行,并收集和计算必要的统计信息并将其写入汇总表。
反映您的报告查询并放置适当的分区本地索引
仅针对您的网络前端
答案 2 :(得分:0)
如果您只存储了最后的X个结果而不是所有内容,那么它可能是可行的。可能会减慢速度,但它会起作用。无论何时编写更多数据并阅读更多数据,都会产生影响。适当的DBA方法(如索引和查询优化)可以提供帮助,但无论您使用什么,都会产生影响。
我个人会考虑在数据库中仅存储用户的默认视图,并使用会话来跟踪其余部分。当然,当你登录时,没有历史。但是您可以利用它来突出显示一组您认为对于引导用户重要或相关的特殊页面。一个突出的系统。更快,更容易,更友好。
至于偏见,您可以为每个记录编写一组关键字,并对数组进行相应的排序。使用PHP不会非常困难。
答案 3 :(得分:0)
我每月使用MySQL和超过2M的记录(页面浏览量),我们每天都经常在该表上运行报告。
该表按月分区(如已建议)并在需要时编入索引。
我还通过创建一个名为“page_view_YYMM”的新表(YY =年,MM =月)并在必要时使用某些UNIONS来清除超过6个月的数据表
对于第二个问题,我接近它的方法是创建一个包含您的产品列表的表格,这很简单:
url, description
描述将是剥离页面或项目内容的标签(取决于您希望如何影响搜索),然后在描述上添加全文索引并在该表上搜索,添加可能的额外条款在用户浏览您认为相关的网站时收集(例如类别名称或品牌)