代码之家  ›  专栏  ›  技术社区  ›  sindre j

MySQL中大表(>10.000.000行)中列的通配符搜索

  •  2
  • sindre j  · 技术社区  · 16 年前

    您会使用哪些技术来实现对MySql中非常大的表上的列中的内容的搜索?例如,假设您在数据库的表中存储了10000封电子邮件,并希望实现主题搜索,这将使我能够搜索电子邮件主题中存在的一个或多个单词。如果用户搜索“圣诞老人”,你应该会发现一封主题为“圣诞老人今年圣诞节来拜访我们”和“圣诞节,圣诞老人会来吗”的电子邮件。

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

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

    是否有原生支持这种搜索的数据库?

    6 回复  |  直到 9 年前
        1
  •  8
  •   Eran Galperin    16 年前

    如果使用MyISAM作为存储引擎,则可以使用FULLTEXT索引。然而,MySQL在文本搜索方面一般不是很好。

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

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

        2
  •  2
  •   Bill Karwin    16 年前

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

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

    我听说了一些好消息 Sphinx Search ,但我还没用过。

    这是另一个关于Sphinx的博客: http://capttofu.livejournal.com/13037.html

        3
  •  1
  •   Zoredache    16 年前

    虽然mysql全文索引是可能的,但我怀疑我会考虑使用一些设计成搜索引擎的东西,比如 Lucene .

        4
  •  0
  •   Craig Shearer    16 年前

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

    但你的想法总体上是合理的。您实际上是在提前计算表上的“索引”,以加快搜索速度。

        5
  •  0
  •   Eli    16 年前

    你想看看 MATCH...AGAINST 功能。

    例如,请参见: Using MySQL Full-text Searching

        6
  •  0
  •   Javier    16 年前

    检查“ full text search 在MySQL文档中(AFAIK,所有当前的DBMS都支持此功能)

    推荐文章