有效跟踪最新搜索
Posted
技术标签:
【中文标题】有效跟踪最新搜索【英文标题】:Keep track of latest searches efficiently 【发布时间】:2014-01-15 23:06:15 【问题描述】:我有一个 ASP.Net MVC 5 网站。我的一个控制器有一个Search
操作,用于搜索数据库中的商店列表。
我想以某种方式跟踪最新的搜索查询并将它们显示给另一个页面中的用户。我想到的是:
-
最直接的方法是在搜索操作中将查询保存在数据库中:我认为每次查询都访问数据库不是一个好主意。
保存搜索操作的日志,然后对其进行解析并将其显示给用户。我觉得有点脏!
将查询保存在缓存中,并每隔几秒或几分钟将它们推送到数据库。这对我来说似乎是最好的选择。目前我正在使用它进行页面点击。我每次都会增加页面的点击量,将其保存到缓存中并将结果保存到数据库中。
有没有更好的方法?你会建议哪种方法?
【问题讨论】:
您使用的是哪个数据库服务器?您希望将最新的搜索信息保留多长时间,保留多少条搜索记录? 我使用的是 SQL Server 2008。另外我首先使用的是实体框架代码。我想要最新的 50 个查询。 【参考方案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
【讨论】:
感谢您的回答。我不希望在网站上显示用户他们的 查询。我想向他们展示其他人一直在寻找的东西。你认为我应该在哪里使用存储过程?因为我问这个问题的主要原因是尽量减少数据库的开销。 我明白了.. 我认为您可以创建一个存储过程来执行搜索,并且在该存储过程中,在执行搜索之前,您可以执行INSERT
将搜索保存在“search_history”表
我很困惑,我应该在哪里存储这 50 个搜索之前然后将它们存储到数据库中?
我的意思是同一个存储过程可以在执行之前存储搜索。我已更新我的答案以显示存储过程的示例。您甚至可以向存储过程添加更多逻辑,以便在 SearchHistory 表中最多插入 50 个搜索。
非常感谢您更新的答案。但是有可能我想在不同的页面上显示以前的搜索。这样就没有对INSERT
的查询。那个场景怎么样?以上是关于有效跟踪最新搜索的主要内容,如果未能解决你的问题,请参考以下文章