2011-05-23 44 views
1

我刚刚过来这个网站:http://www.hittaplagget.se。如果输入以下搜索词moo,则自动提示立即弹出。如何获得这个闪电般的快速搜索?

但是,如果您转到我的网站http://storelocator.no,并使用相同的搜索词组(在“搜索品牌”字段中),自动提示建议任何操作都需要很长时间。

我知道我们只能猜测他们正在使用什么类型的技术,但希望这里的某个人可以做出比我更好的教育猜测。

在我的解决方案中,我只做了一个SELECT moo% FROM table并返回结果。 我还没有索引我的表格,因为里面只有7000行。但我正在考虑使用Lucene索引我的表。

任何人都可以建议我需要做什么才能获得同样快速的自动建议吗?

+0

你比它们慢500毫秒。 – JohnP 2011-05-23 07:54:58

+0

为尽可能快地搜索,不应通过查询检索自动完成结果,而应通过本地JS数组检索;检查jQuery自动完成。如果必须进行查询,则尝试在sql级别进行优化。可能还有其他因素起作用,它们具有出众的硬件,更好的网络延迟(由于全球多服务器)等等。 – virtualeyes 2011-05-23 07:55:52

+0

上面的评论建议通过javascript发送所有7000个项目,甚至不知道用户是否会做搜索,即使他这样做,我强烈建议不要那样做。 – Till 2011-05-23 08:04:53

回答

1

Lucene是一个全文搜索索引,可能是也可能不是你要找的。 Lucene会在整个索引列(例如Mootastic和Fantasticmoo)中找到任何“moo”,并且不一定会加快搜索速度,尽管它比像'%moo%'类型的搜索更快。

正如其他人已经指出一个常规索引(可能甚至是唯一的?)是你想要的,如果你正在执行“开始”类型的搜索。

1

您需要将表扫描表,所以我建议:

  • 不要把任何表中的行,你并不需要 - 例如,“不活跃”的记录 - 让他们在不同的表格
  • 不要在表格中放置任何不需要的列
  • 您可以通过使用一个特殊的“搜索表”来实现这一点,该搜索表只包含您感兴趣的行/列,并更新它来自“主表”。

如果行很小,对7000行表进行扫描应该是非常有效的;我从你的问题领域了解到,情况就是这样。

但正如其他人指出的那样 - 不要在发送7000行到客户端时不需要它。

传统索引可以将LIKE'someprefix%'优化为范围扫描,所以它可能有帮助。如果你想在条目的任何部分搜索字符串,它将是一个表扫描(在这样一个小桌子上不应该慢!)