如何快速搜索?

时间:2011-05-23 07:50:24

标签: php mysql search search-engine

我刚来到这个网站:http://www.hittaplagget.se。如果您输入以下搜索词moo,则会立即弹出autosuggest。

但是,如果您访问我的网站http://storelocator.no,并使用相同的搜索词组(在“搜索品牌”字段中),则自动提示需要更长时间才能提出建议。

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

在我的解决方案中,我只执行SELECT moo% FROM table并返回结果。 我还没有索引我的表,因为它只有7000行。但我正在考虑使用Lucene为我的表编制索引。

为了获得同样快速的自动提示,有人可以建议我需要做些什么吗?

3 个答案:

答案 0 :(得分:4)

您必须在包含搜索字词的列上添加索引,即使是7000 - 否则,数据库每次都会搜索整个列表。请参阅http://dev.mysql.com/doc/refman/5.0/en/create-index.html

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

您需要对表进行表扫描,因此我建议:

  • 不要在表中放置任何不需要的行 - 例如,“非活动”记录 - 将它们保存在不同的表中
  • 不要在表中放置任何不需要的列
  • 你可以通过一个特殊的“搜索表”来实现这个目的,它只包含你感兴趣的行/列,并从“主表”中更新它。

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

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

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