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