如何设计数据库表结构来存储和检索搜索统计信息?

时间:2009-02-05 23:19:23

标签: sql search statistics

我正在开发一个带有自定义搜索功能的网站,我想收集用户搜索内容的统计信息。

这不是对网站内容的全文搜索,而是搜索具有以下搜索模式的公司:

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

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

3 个答案:

答案 0 :(得分:1)

嗯,这取决于不同的搜索模式是如何工作的,但通常我会说有3列的表可以工作:

SearchType    SearchValue    Count

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

通过这样做,您可以在以后查询时获得相当大的灵活性。您可以弄清楚每种类型最受欢迎的搜索是什么:

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

您可以找出最受欢迎的搜索类型:

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

答案 1 :(得分:1)

这是一个相当普遍的问题,但这就是我要做的事情:

选项1 如果要严格分隔所有三种搜索类型,请为每种搜索类型创建一个表。对于公司名称,您只需存储CompanyID(假设您的网站维护公司列表)和搜索计数。对于区号,请存储区号和搜索计数。如果区号不存在,请插入。提供的服务最依赖于您的设置。最通用的方法是存储关键字和搜索计数,如果尚未插入则再次插入。

您也可以选择存储搜索日期信息。例如,您将拥有一个包含提供服务关键字和唯一ID的表。你有另一个表,其中包含一个FK到该ID和一个SearchDate。这样,您可以在最小化存储的同时了解数据。

选项2 对所有搜索都一视同仁。一个表格,其中包含关键字列和计数列,如果需要,还包含SearchDate。

答案 2 :(得分:0)