MySQL InnoDB文本搜索选项

时间:2010-10-29 00:15:04

标签: mysql innodb full-text-search myisam

完全清楚我的InnoDB表不支持FULLTEXT搜索,我想知道我在表中搜索文本的替代方法是什么?使用LIKE时性能 是不是很糟糕?

我看到很多建议说要在MYISAM表中复制InnoDB表,然后针对THAT表运行查询并匹配两者之间的键,我只是不知道这是一个非常好的解决方案。

我并不反对使用某些第三方解决方案,但我不是那么忠实于此。我想更多地了解MySQL可以自己做些什么。

想法?

3 个答案:

答案 0 :(得分:3)

如果您想正确,您可能应该从一开始就使用LuceneSphinx

  1. 它可以让你保持你的桌面结构。
  2. 你将获得巨大的性能提升(提前考虑)
  3. 您将可以访问a lot of fancy search functions
  4. Lucene和Sphinx的规模都非常出色(Lucene为维基百科和Digg / Sphinx提供强大的Slashdot功能)

答案 1 :(得分:1)

使用LIKE只能在没有前导%时使用索引。在大桌子上做LIKE'%foo%'将是一个巨大的性能打击。如果我是你,我会考虑使用sphinx。它能够使用您提供的查询通过从MySQL中删除数据来构建索引。它非常简单,旨在解决您的确切问题。

还有一个solr,这是一个围绕lucene的http包装器,但我发现sphinx更直接一点。

答案 2 :(得分:0)

我和其他人一样,我会敦促使用Lucene,Sphinx或Solr。

但是,如果这些内容已经完成并且您的要求很简单,我已经使用了here步骤在过去的多个项目中构建简单搜索功能。

该链接适用于Symfony / PHP,但您可以将概念应用于任何语言和应用程序结构,前提是存在可用的词干算法的实现。但是,如果您不使用数据访问模式,您可以在更新记录时挂钩以更新索引,这样做并不容易。

另外一些缺点是,如果您需要单个索引表但需要索引多个表,则必须在DAL中模拟参照完整性,或者为要索引的每个不同表添加fk列。我不确定你想要做什么,这可能完全排除它。