【发布时间】:2009-02-05 23:19:23
【问题描述】:
我正在开发一个具有自定义搜索功能的网站,我想收集有关用户搜索内容的统计信息。
不是对网站内容进行全文搜索,而是对公司进行搜索,搜索方式如下:
- 按公司名称
- 按区号
- 按提供的服务
- ...
如何设计用于存储搜索统计信息的数据库?
哪些信息最相关?我应该如何查询它们?
【问题讨论】:
标签: sql search statistics
我正在开发一个具有自定义搜索功能的网站,我想收集有关用户搜索内容的统计信息。
不是对网站内容进行全文搜索,而是对公司进行搜索,搜索方式如下:
如何设计用于存储搜索统计信息的数据库?
哪些信息最相关?我应该如何查询它们?
【问题讨论】:
标签: sql search statistics
嗯,这取决于不同搜索模式的工作方式,但通常我会说一个有 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 如果要严格区分所有三种搜索类型,请为每种类型创建一个表。对于公司名称,您可以简单地存储 CompanyID(假设您的网站正在维护公司列表)和搜索计数。对于区号,存储区号和搜索次数。如果区号不存在,请插入。提供的服务主要取决于您的设置。最通用的方法是存储关键字和搜索计数,如果还没有,则再次插入。
您也可以选择存储搜索日期信息。例如,您将有一个包含提供服务关键字和唯一 ID 的表。您将拥有另一个表,该表具有该 ID 的 FK 和 SearchDate。这样一来,您就可以随着时间的推移理解数据,同时最大限度地减少存储空间。
选项 2 对所有搜索一视同仁。一个包含一个关键字列和一个计数列的表,如果需要,可以合并 SearchDate。
【讨论】: