我开始研究基本的即时搜索工具。
这是工作流草稿。
我有以下顾虑/注意事项:
问题:快速打字员:我在几秒钟内输入了这句话。这意味着在每次按键时我都会向数据库发送请求。我可能有10个人在做同样的事情。服务器可以返回5条记录的列表,也可以返回1000条记录的列表。此外,我可以按住一个键,这将向数据库发送几百个请求 - 这可能会降低整个系统的速度。
可能的解决方案:
问题:我不确定LINQ-to-SQL是否能应对潜在的负载。
解决方案:我可以使用存储过程,但还有其他可行的替代方案吗?
我很想知道是否还有其他人正在开展类似的项目,以及在实施之前你已经考虑了哪些事情。
谢谢
答案 0 :(得分:1)
当用户对建议感兴趣时,您应该只调用的网络服务。用户只有在知道要键入的内容时才会快速输入。因此,当他快速打字时,您无需向用户提供建议。
当快速打字员暂停一段时间后,他可能会对搜索建议感兴趣。那是你打电话给网络服务来检索建议的时候。
慢打字员总是会受益于搜索建议,因为它可以节省他们在查询中输入的时间。在这种情况下,按键之间总会有短暂的暂停。同样,这些短暂停顿是您从Web服务检索建议的队列。
用户按下某个键后,您可以使用setTimeout
功能调用您的Web服务500毫秒。如果用户按下某个键,您可以使用clearTimeout
重置超时。这将导致仅在用户空闲半秒时才调用Web服务。
如果您的查询不是太复杂,LINQ-to-SQL可能会表现得很好。
要提高效果,您可以将建议数量限制为大约20个。无论如何,大多数用户对成千上万的建议都不感兴趣。
答案 1 :(得分:1)
如果要搜索文本块以查找特定关键字,请考虑使用全文目录而不是like子句。除了更快,它可以配置为识别同一个单词的多种形式(如鼠标和老鼠或叶子和树叶)。
为了让您的搜索更加闪亮,您可以使用levenshtein距离更正许多常见拼写错误,以便在未找到匹配项时将搜索字词与相似字词列表进行比较。