2

您将使用哪些技术来实现对 MySql 中一个非常大的表的列中的内容的搜索?例如,假设您有 10.000.000 封电子邮件存储在数据库的一个表中,并且想要实现主题搜索,这将使我能够搜索电子邮件主题中存在的一个或多个单词。如果用户搜索“圣诞圣诞老人”,您应该会找到一封电子邮件,其中包含“圣诞老人今年圣诞节拜访我们”和“圣诞节,圣诞老人将永远出现”等主题。

我的想法是处理主题中的所有单词(去除所有数字、特殊符号、逗号等)并将每个单词保存在索引表中,其中我在单词列上有一个唯一索引。然后我会通过多对多关系表将其链接到电子邮件表。

有没有更好的方法在非常大的表上执行通配符搜索?

是否有数据库本身支持这种搜索?

4

6 回答 6

8

如果您使用 MyISAM 作为存储引擎,则可以使用 FULLTEXT 索引。但是,一般来说,MySQL 对文本搜索不是很好。

更好的选择是使用专用的文本索引解决方案,例如LuceneSphinx。我个人推荐 Sphinx - 它与 PHP 和 MySQL 有很好的集成,并且非常非常快(甚至可以用来加速普通查询 - 执行非常快速的分组和排序)。

维基百科有一个很好的不同索引引擎列表 -这里

于 2008-12-16T22:44:00.167 回答
2

MySQL 的 MyISAM 表支持FULLTEXT索引,这有助于这种搜索。

但这并不是用于此类搜索的最快技术。而且你不能对存储在 InnoDB 表中的数据使用它。

我听说过一些关于Sphinx Search的好消息,但我还没有使用它。

这是另一个关于狮身人面像的博客:http: //capttofu.livejournal.com/13037.html

于 2008-12-16T22:40:19.410 回答
1

虽然 mysql 全文索引是可能的,但我怀疑我会考虑使用设计为像Lucene这样的搜索引擎的东西。

于 2008-12-18T03:20:40.420 回答
0

这听起来像是 SQL Server 支持的全文搜索。

但是您的想法通常是合理的。您正在有效地提前计算表上的“索引”以加快搜索速度。

于 2008-12-16T22:35:20.170 回答
0

检查MySQL 文档中的“全文搜索”(AFAIK,所有当前的 DBMS 都支持这个)

于 2008-12-16T22:36:07.360 回答
0

你想看看MATCH...AGAINST函数。

参见,例如:使用 MySQL 全文搜索

于 2008-12-16T22:41:45.493 回答