Php 高效的MySQL文本搜索

Php 高效的MySQL文本搜索,php,mysql,search,sql-like,Php,Mysql,Search,Sql Like,我有一个使用MySQL用PHP编写的论坛,我想让论坛搜索可用。它将允许用户搜索特定字符串,以及过滤元数据,如发布日期和主题等。元数据可以被有效地搜索,因为这些字段中的大多数都被索引了,但是我认为主要的用例当然是正常的文本搜索,而不使用元数据过滤器来修剪结果 经过一些测试,我发现,与大多数人的设置相反,SQL_CALC_found_ROWS要比为了获得结果数量而进行两次查询快得多(大约1.5倍),因此我最好的查询是: SQL_CALC_FOUND_ROWS * from blahblah wher

我有一个使用MySQL用PHP编写的论坛,我想让论坛搜索可用。它将允许用户搜索特定字符串,以及过滤元数据,如发布日期和主题等。元数据可以被有效地搜索,因为这些字段中的大多数都被索引了,但是我认为主要的用例当然是正常的文本搜索,而不使用元数据过滤器来修剪结果

经过一些测试,我发现,与大多数人的设置相反,SQL_CALC_found_ROWS要比为了获得结果数量而进行两次查询快得多(大约1.5倍),因此我最好的查询是:

SQL_CALC_FOUND_ROWS * from blahblah where content like '%term%' limit whatever whatever;

毫不奇怪,这真的很慢,因为它必须对数据库中的每个论坛帖子进行文本匹配。我能做些什么来改进这个吗?在使用
LIKE
操作符时,在内容(文本)字段上放置索引是否会有帮助?通常是如何做到这一点的?

即使使用like运算符,列上的索引也会有所帮助,但如果一开始也有通配符,则不会有帮助。因此,对于
term%
而言,索引将是有益的,但对于
%term%
而言,则不会

但是,您可以查看
全文
索引。如果您将这样的索引添加到文本字段中,MySQL将为单独的单词编制索引,并允许您执行各种搜索引擎式的搜索。要搜索,请使用
MATCH()。。。针对
而不是像那样的

见文件:

免责声明:我建议您在第一次实验后仔细阅读文档。全文索引功能强大,但仍有其局限性

全文索引占用了相当多的空间,它们的构建方式取决于MySQL中的核心设置,因此它们在本地设置和服务器之间的行为可能有所不同

例如,他们索引完整的单词,但漏掉非常短的单词和某些停止词。此外,由于它们为单词编制索引,您将无法搜索部分单词。查找“术语”不会找到现成的“确定”


因此,请确保这些索引可以执行您想要的操作,如果您有一个共享主机,请确保在执行大型实现之前,可以按照您喜欢的方式对它们进行配置和调整。

您研究过全文搜索吗?啊,谢谢,我以前没见过:)我只是觉得一定有比
更好的东西,比如“%term%”