保存搜索结果的数据库结构

时间:2009-01-21 21:23:07

标签: php mysql data-structures

我目前在社交网站工作。

我的老板最近有想法通过随机而非正常结果(注册日期)显示搜索结果。问题很简单明了:如果你从一个页面转到另一个页面,每次都会随机化列表,每次都会显示不同的结果。

我有想法将结果存储在数据库+ cookie中,如下所示:

  • 包含$ _POST请求的序列化版本的Cookie(如果我们想要重新排序则需要)
  • 一个表格,用作搜索ID =>的基础。搜索(ID,用户_id, creation _日期)
  • 一个表格,用于存储结果及其顺序=>搜索_results (search_id, order, user _ id)的

流程图看起来像这样:

  • 每次搜索后,我将“where”存储到cookie或会话中
  • 然后我在“搜索”中删除了之前的搜索
  • 然后我删除了“searching_results”
  • 中的先前结果
  • 然后我在“搜索”中插入一行
  • 然后我将每个用户行插入“searching_results”
  • 最后我将用户重定向到像search_id = [search_key]
  • 这样的思考

这里存在一个很大的缺陷:表现......它绝对有可能使系统向下或非常慢。

知道最好的结构是什么?

4 个答案:

答案 0 :(得分:1)

如果不是随机排序,而是通过某些功能订购,其中订单已知并且可重复,只是不明显?您可以使用搜索查询中的一些数据来播种此类函数,以使其重复更加明显。通过这种方式,您可以在结果中来回寻找并始终获得您期望的结果。音乐播放器使用这种功能来实现其随机播放功能(如果您单击后退,则会获得上一首歌曲,如果您再次单击,则会返回到您开始的位置)。我相信你可以通过一些函数来实现这个... bitwise XORing带有一些常量(来自查询)的ID值,然后按结果数排序可能就足够了。我任意选择XOR,因为它是一个简单的简单函数,可以让你获得可重复和非显而易见的结果。

答案 1 :(得分:0)

嗯可能,但是xor运算符不会说它是否是OR独占?我的意思是,据我所知,这里没有数学运算。

答案 2 :(得分:0)

抱歉,我知道这没有帮助,但我不明白为什么你的老板想要这个?

我知道如果我在社交网络上搜索某个人,那么我希望结果仅按相关性和相关性排序。我认为随机结果对用户来说只是令人沮丧,但也许只是我。

例如,如果我搜索“John Smith”,那么第一批第一批结果最好是名为“John Smith”的人。然后在结果的末尾显示类似的名字。我不想搜索“John Smith”并将“Jon Smithers”作为我的第二个结果。

答案 3 :(得分:0)

好吧,我和Matt在问“为什么?”

我认为rmeador也有一个很好的建议。您可以通过不同的字段或某种算法随机排序。仅仅是DESC / ASC在上次更新或其他结果字段中的排列。

其他选项是首次进行初始搜索并仅返回相关ID,然后将完整ID的字符串存储在数据库中,然后每个后续页面都会查找这些ID。

我的两分钱。

我可以看到一个场景,其中随机化结果集非常有用,但不适用于搜索,但适用于浏览个人资料或艺术家或本地事件。它提供了更多接触传统定向搜索中不会出现的内容。