构建对特定表的搜索

时间:2010-07-15 15:06:46

标签: php mysql

我有一个搜索文本字段,用于搜索表格中的特定列,但结果并不像我预期的那样。

当用户尝试搜索“hello world how”时,他将找不到结果,因为我的查询是LIKE'%hello world how%'。表行包含字符串“hello world”。

如何使用php和mysql进行正确搜索,如果我需要在表中的多个表/所有列上进行搜索,该怎么办?哪种方法最好?

1 个答案:

答案 0 :(得分:2)

执行此操作的一种错误方法是将用户的搜索文本拆分为空白。 “你好世界怎么样”会成为“你好世界%如何”。然而,在“你好世界”之后,仍然需要“如何”这个词,并且不能保证“你好”和“世界”彼此靠近。

此外,即使您在要搜索的列上放置索引,使用通配符(%)加星标的LIKE子句也不能在MySQL中使用该索引。这意味着每次搜索都是全表扫描。这可能会很慢。

您的一个解决方案可能是MySQL fulltext search。它非常灵活。但是,它仅适用于MyISAM表。您可能希望将InnoDB用于您的数据,因为MyISAM不支持外键或事务。您可以创建使用MyISAM和全文索引的单独的专用表,仅用于搜索目的。

Sphinx是您可以使用的另一种选择。它是第三方搜索系统,可以附加到MySQL和PHP。

然而,所有这些答案都集中在一次搜索一列。如果您需要搜索整行,那会变得更有趣。您可能需要考虑基于“文档”的搜索系统,例如ElasticSearch