2009-02-05 95 views
0

我正在开发一个具有自定义搜索功能的网站,我想收集有关用户搜索内容的统计信息。如何设计用于存储和检索搜索统计信息的数据库表结构?

它不是一个完整的文本搜索网站的内容,而是为企业与像搜索模式搜索:

  • 按公司名称
  • 按区号
  • 所提供的服务
  • ...

如何设计数据库以存储有关搜索的统计信息?
什么信息最相关,我应该如何查询它们?

回答

1

嗯,这取决于如何在不同的搜索模式的工作方式,但一般来说,我会说,有3列的表将工作:

SearchType SearchValue Count 

每当有人进行搜索时,假设他们搜索“公司名称:Initech”,首先查询表中是否存在具有SearchType =“Company Name”的表中的任何行(或者您给出的任何枚举/ ID值此搜索类型)和SearchValue =“Initech”。如果此行已经有一行,则通过递增Count列来更新该行。如果此搜索没有一行,则插入一个新的计数为1的计数。

通过这样做,您将在后期查询时拥有相当大的灵活性。你可以找出每类最热门的搜索是:

... ORDER BY Count DESC WHERE SearchType = 'Some Search Type' 

你可以找出最流行的搜索类型:

... GROUP BY SearchType ORDER BY SUM(Count) DESC 

等等

+0

这也是我的设计。我想知道是否有任何一种WWGD(谷歌会做什么?)stlye添加到该设计。或者一些聪明的技巧。 – arturh 2009-02-05 23:38:01

1

这是一个相当普遍的问题但这里是我会做的:

选项1 如果你想严格分离所有三个搜索ch类型,然后为每个表创建一个表。对于公司名称,您可以简单地存储CompanyID(假设您的网站正在维护公司列表)和搜索次数。对于区号,存储区号和搜索次数。如果区号不存在,请插入它。提供的服务最依赖于您的设置。最常用的方法是存储关键词和搜索计数,如果还没有,则再次插入。

或者,您也可以存储搜索日期信息。作为一个例子,你可以使用提供的服务关键字和唯一的ID。您将拥有另一个带有FK的表格和一个SearchDate。这样,您可以随时间理解数据,同时最大限度地减少存储空间。

选项2 对待所有搜索相同。一个包含关键字列和计数列的表格,如果需要,则包含SearchDate。