C# 有效跟踪最新搜索

C# 有效跟踪最新搜索,c#,asp.net,asp.net-mvc,asp.net-mvc-5,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 5,我有一个ASP.NETMVC5网站。我的一个控制器有一个Search操作,用于搜索数据库中的商店列表 我想以某种方式跟踪最新的搜索查询,并在另一个页面中向用户显示它们。我想到的是: 最简单的方法是在搜索操作中将查询保存在数据库中:我认为为每个查询都点击数据库不是一个好主意 保存搜索操作的日志,然后对其进行解析并将其显示给用户。我觉得有点脏 将查询保存在缓存中,并每隔几秒钟或几分钟将其推送到数据库。这似乎是我最好的选择。目前我正在使用这个页面点击。我每次增加页面的命中率,将其保存到缓存中,并将结果

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

我想以某种方式跟踪最新的搜索查询,并在另一个页面中向用户显示它们。我想到的是:

  • 最简单的方法是在搜索操作中将查询保存在数据库中:我认为为每个查询都点击数据库不是一个好主意
  • 保存搜索操作的日志,然后对其进行解析并将其显示给用户。我觉得有点脏
  • 将查询保存在缓存中,并每隔几秒钟或几分钟将其推送到数据库。这似乎是我最好的选择。目前我正在使用这个页面点击。我每次增加页面的命中率,将其保存到缓存中,并将结果保存到数据库中

  • 有更好的办法吗?您建议采用哪种方法?

    您是否考虑过将搜索关键词存储在客户端?(本地存储或会话存储,具体取决于您的要求)

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

    如果您真的想在数据库中存储搜索查询,我建议使用一个存储过程(),它可以包含历史插入和实际搜索

    希望这能对你有所帮助


    存储过程示例:

    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
    

    您正在使用哪个数据库服务器?您想保留最新的搜索信息多长时间?有多少搜索记录?我使用的是SQL Server 2008。另外,我首先使用的是实体框架代码。我想要最新的50个问题。谢谢你的回答。我不想在网站上向用户展示他们的疑问。我想向他们展示其他人一直在寻找的东西。您认为我应该在哪里使用存储过程?因为我问这个问题的主要原因是为了最小化数据库的开销。我明白了。。我认为您可以创建一个存储过程来执行搜索,在该存储过程中,在执行搜索之前,您可以执行
    INSERT
    将搜索保存在“search\u history”表中我感到困惑,在将这50个搜索存储到数据库之前,我应该将它们存储在哪里?我的意思是,相同的存储过程可以在执行搜索之前存储搜索。我已经更新了答案,以显示存储过程的示例。您甚至可以向存储过程添加更多逻辑,在SearchHistory表中最多只插入50个搜索。非常感谢您更新的答案。但我可能想在不同的页面上显示以前的搜索结果。这样就不需要查询
    INSERT
    。那情况如何?