有效地跟踪最新搜索

时间:2014-01-15 23:06:16

标签: c# asp.net asp.net-mvc asp.net-mvc-5

我有一个ASP.Net MVC 5网站。我的一个控制器有一个Search动作,用于搜索数据库中的商店列表。

我想以某种方式跟踪最新的搜索查询并将其显示给另一页面中的用户。我想到的是:

  1. 最简单的方法是在搜索操作中将查询保存在数据库中:我认为为每个查询命中数据库并不是一个好主意。
  2. 保存搜索操作的日志,然后解析并显示给用户。对我来说似乎有点脏!
  3. 将查询保存在缓存中,并每隔几秒或几分钟将其推送到数据库。这对我来说似乎是最好的选择。目前我正在使用它进行页面点击。我每次都会增加页面的匹配,将其保存到缓存并将结果保存到数据库。
  4. 有更好的方法吗?你建议采用哪种方法?

1 个答案:

答案 0 :(得分:1)

您是否考虑过在客户端存储搜索关键字? (HTML5 Web Storage localStorage sessionStorage ,具体取决于您的要求)。

然后,例如,您可以构建一个指向控制器实际搜索操作方法的链接列表,如果用户单击它,搜索将再次执行,因为结果可能已更改。

如果你真的想在数据库上存储搜索查询,我建议使用一个存储过程(Does Entity Framework Code First support stored procedures?),它可以包含历史插入和实际搜索。

希望这可以帮到你


存储过程示例:

CREATE PROCEDURE uspGetShopsByName
                 @Keyword nvarchar(30) 
   AS
      -- Store the search in the history table
      INSERT INTO [dbo].[SearchHistory] ([Keyword]) VALUES (@Keyword);
      -- Execute the search
      SELECT * FROM [dbo].[Shops] WHERE [ShopName] LIKE @Keyword + '%' 
GO