即时搜索注意事项

时间:2010-09-29 10:43:38

标签: web-services full-text-search search-engine

我开始研究基本的即时搜索工具。

这是工作流草稿。

  1. 用户按键
  2. 当前值传递给将对Web服务进行Ajax调用的函数
  3. Web服务将通过LINQ-To-SQL在数据库上运行select,并将检索与我的值匹配的值列表。我将通过使用SQL Like子句
  4. 来实现这一点
  5. Web服务将数据返回给函数。
  6. 函数将通过jQuery填充相对控件。
  7. 我有以下顾虑/注意事项:

    问题:快速打字员:我在几秒钟内输入了这句话。这意味着在每次按键时我都会向数据库发送请求。我可能有10个人在做同样的事情。服务器可以返回5条记录的列表,也可以返回1000条记录的列表。此外,我可以按住一个键,这将向数据库发送几百个请求 - 这可能会降低整个系统的速度。

    可能的解决方案:

    1. 我可以每2-4秒向数据库发送一次请求的计时器
    2. 除非值至少为3个字符
    3. ,否则不要返回任何数据
    4. 返回有限数量的行?
    5. 问题:我不确定LINQ-to-SQL是否能应对潜在的负载。

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

      我很想知道是否还有其他人正在开展类似的项目,以及在实施之前你已经考虑了哪些事情。

      谢谢

2 个答案:

答案 0 :(得分:1)

何时调用Web服务

当用户对建议感兴趣时,您应该只调用的网络服务。用户只有在知道要键入的内容时才会快速输入。因此,当他快速打字时,您无需向用户提供建议。

当快速打字员暂停一段时间后,他可能会对搜索建议感兴趣。那是你打电话给网络服务来检索建议的时候。

慢打字员总是会受益于搜索建议,因为它可以节省他们在查询中输入的时间。在这种情况下,按键之间总会有短暂的暂停。同样,这些短暂停顿是您从Web服务检索建议的队列。

用户按下某个键后,您可以使用setTimeout功能调用您的Web服务500毫秒。如果用户按下某个键,您可以使用clearTimeout重置超时。这将导致仅在用户空闲半秒时才调用Web服务。

LINQ-to-SQL的性能

如果您的查询不是太复杂,LINQ-to-SQL可能会表现得很好。

要提高效果,您可以将建议数量限制为大约20个。无论如何,大多数用户对成千上万的建议都不感兴趣。

答案 1 :(得分:1)

如果要搜索文本块以查找特定关键字,请考虑使用全文目录而不是like子句。除了更快,它可以配置为识别同一个单词的多种形式(如鼠标和老鼠或叶子和树叶)。

为了让您的搜索更加闪亮,您可以使用levenshtein距离更正许多常见拼写错误,以便在未找到匹配项时将搜索字词与相似字词列表进行比较。