即时搜索注意事项

问题描述 投票:0回答:2

我已经开始在一个基本的即时搜索工具的工作。

这是一个工作流程草案。

  1. 用户按下某个键
  2. 当前值被传递给函数,这将使一个Ajax调用Web服务
  3. Web服务将贯穿LINQ到SQL数据库上的选择,并会检索符合我值值的列表。我将使用SQL LIKE子句实现这一目标
  4. Web服务将数据返回功能。
  5. 功能将通过jQuery的填充相对控制。

我有以下的忧虑/注意事项:

问题:快速打字员:我在这句话几秒钟内键入。这意味着,在每按一次键,我将发送到数据库的请求。我可能有10人做同样的事情。服务器可以返回5个记录列表,或者它可能会返回1000个记录列表。我也可以按住一个关键,这将几百请求发送到数据库 - 这将有可能减缓整个系统瘫痪。

可能的解决方案:

  1. 定时器在那里我将能够请求发送到数据库中每2-4秒一次
  2. 除非该值至少为3个字符长不返回任何数据
  3. 返回行的数量有限?

问题:我不知道是否LINQ到SQL将与潜在的负荷应对。

解决方案:我可以使用存储过程,但没有任何其他可行的替代方案?

我有兴趣听到的话,其他人正在一个类似的项目,你实现它之前已经算什么东西。

谢谢

web-services full-text-search search-engine
2个回答
1
投票

When to call the web service

当用户感兴趣的建议,你应该只调用Web服务。如果他知道什么类型的用户将只能输入快。因此,尽管他的打字速度快,你不必提供建议给用户。

当一个快速打字员暂停的时间很短,那么他的搜索建议可能感兴趣。当您调用Web服务来获取建议的。

慢打字员将始终从搜索建议中受益,因为它可以在查询时间打字保存。在这种情况下,你将永远有击键之间的短暂停。同样,这些短暂停是你的队列中来检索Web服务的建议。

您可以使用setTimeout功能的用户按下一键后,打电话给你的web服务500毫秒。如果用户按下一个键,就可以使用clearTimeout复位超时。这将导致到Web服务的调用只有当用户处于闲置状态半秒钟。

Performance of LINQ-to-SQL

如果您的查询是不是太复杂,LINQ到SQL可能会执行得很好。

为了提高性能,您可以限制的建议数量大约二十。大多数用户没有在数千建议感兴趣呢。


1
投票

考虑使用类似条款的全文目录,而不是,如果你正在寻找通过文本块,以查找特定的关键字。除了是快得多,它可以被配置为识别相同的字(如鼠标和小鼠或叶和叶)的多种形式。

要真正使搜索服务,您可以纠正使用Levenshtein距离时,没有找到匹配的搜索项比较类似的术语列表,许多常见的拼写错误。

© www.soinside.com 2019 - 2024. All rights reserved.