2010-10-29 53 views
3

知道我的InnoDB表不支持FULLTEXT搜索,我想知道我的替代方法是什么在表中搜索文本?使用LIKE时性能不好?MySQL的InnoDB文本搜索选项

我看到很多建议说要在MYISAM表中创建一个有问题的InnoDB表的副本,然后对THAT表运行查询并在两者之间匹配键,我只是不知道这是一个漂亮的解。

我并不反对使用一些第三方解决方案,但我不是那么喜欢。我想更多地探讨MySQL可以自己做什么。

想法?

回答

3

如果你想这样做正确你应该用LuceneSphinx去从一开始。

  1. 它可以让你保留你的表结构。
  2. 你就会有一个巨大的性能提升(想出人头地)
  3. 你就能取得a lot of fancy search functions

两个Lucene和狮身人面像的规模得非常好(Lucene的权力,维基百科和Digg /狮身人面像权力Slashdot的)

+0

是的,从关于Lucene聊天的数量来看,它看起来像我最好的选择。感谢大家 ! – JHarnach 2010-11-01 16:45:47

1

使用LIKE只能在没有前导%时使用索引。在一张大桌子上做LIKE'%foo%'将会是一个巨大的表现。如果我是你,我会考虑使用sphinx。它能够使用您提供的查询将数据从MySQL中篡改出来,从而构建其索引。这非常简单,旨在解决您的确切问题。

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

0

我作为其他人,我会敦促使用Lucene,Sphinx或Solr。

但是,如果这些都出来,你的要求很简单,我已经使用步骤here来建立简单在过去的多个项目的搜索能力。

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

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