首页 文章

使用InnoDB进行全文搜索

提问于
浏览
93

我正在开发一个高容量的Web应用程序,其中一部分是一个讨论帖子的MySQL数据库,需要平滑地增长到20M行 .

我原本打算在 table 上使用MyISAM(对于内置的fulltext search capabilities),但由于单次写入操作而导致整个表被锁定的想法让我快门 . 行级锁更有意义(更不用说InnoDB 's other speed advantages when dealing with huge tables). So, for this reason, I' m决定使用InnoDB .

问题是...... InnoDB没有内置的全文搜索功能 .

我应该使用第三方搜索系统吗?喜欢Lucene(c++) / Sphinx?你们这些数据库忍者有什么建议/指导吗? LinkedIn的zoie(基于Lucene)看起来是目前最好的选择...围绕实时功能构建(这对我的应用程序来说非常关键 . )我有点犹豫不决,没有一些洞察力......

(仅供参考:将使用高内存装备在EC2上,使用PHP来提供前端)

8 回答

  • 3

    我可以保证MyISAM全文是一个糟糕的选择 - 即使撇开MyISAM表的各种问题一般,我已经看到全文的东西走了轨道并开始破坏自己并定期崩溃MySQL .

    专用搜索引擎肯定会成为最灵活的选项 - 将帖子数据存储在MySQL / innodb中,然后将文本导出到搜索引擎 . 您可以非常轻松地设置定期完整索引构建/发布,并在您认为需要并希望花时间时添加实时索引更新 .

    Lucene和Sphinx都是不错的选择,Xapian也是很好的选择 . 如果你去Lucene路线,我宁愿不与Java搏斗,虽然我没有资格讨论两者的利弊 .

  • 55

    随着MyISAM的逐步淘汰,InnoDB full-text search (FTS) is finally available in MySQL 5.6.4 release.

    来自http://dev.mysql.com/doc/refman/5.6/en/innodb-table-and-index.html#innodb-fulltext-index

    这些索引在物理上表示为整个InnoDB表,它们由SQL关键字操作,例如CREATE INDEX语句的FULLTEXT子句,SELECT语句中的MATCH()... AGAINST语法以及OPTIMIZE TABLE语句 .

    虽然其他引擎有许多不同的功能,但这个是InnoDB,所以它是原生的(这意味着它有一个升级路径),这使它成为一个有 Value 的选择 .

  • 0

    你应该花一个小时来完成Sphinx和Lucene的安装和试驾 . 在数据更新方面,看看是否符合您的需求 .

    令我对Sphinx感到失望的一件事是,它不能很好地支持增量插入 . 也就是说,在插入后重新索引是非常昂贵的,因此建议的解决方案是将数据拆分为较旧的,不变的行和较新的易失行 . 因此,您的应用所执行的每次搜索都必须搜索两次:一次针对旧行的较大索引,另一次针对最近行的较小索引 . 如果它没有与您的使用模式集成,那么这个Sphinx不是一个好的解决方案(至少在当前的实现中不是这样) .

    我想指出另一种可以考虑的解决方案:Google Custom Search . 如果您可以将一些搜索引擎优化应用到您的网络应用程序,然后将索引和搜索功能外包给谷歌,并将谷歌搜索文本域嵌入您的网站 . 它可能是使您的网站可搜索的最经济和可扩展的方式 .

  • 1

    也许你不应该这么快就开始 . Craigslist used to use it .

    MySQL的速度和全文搜索功能使craigslist能够为用户提供服务.craigslist使用MySQL每月提供大约5000万次搜索,每秒搜索速度高达60次 . “

    编辑

    正如下面评论的那样,Craigslist似乎在2009年初的某个时候有了switched to Sphinx .

  • 0

    正如你所指出的那样,狮身人面像非常适合这种东西 . 所有工作都在配置文件中 . 确保你的表是什么,字符串有一些唯一的整数id键,你应该没问题 .

  • 50

    试试这个

    ROUND((LENGTH(text) - LENGTH(REPLACE(text, 'serchtext', ''))) / LENGTH('serchtext'),0)!=0
    
  • 11

    你应该看看狮身人面像 . 值得一试 . 它的索引速度非常快,而且是分布式的 . 你应该看看这个(http://www.percona.com/webinars/2012-08-22-full-text-search-throwdown)webminar . 它谈论搜索并有一些整洁的基准 . 你会发现它很有用 .

  • 0

    如果其他一切都失败了,那总是soundex_match,遗憾的是它不是很快就准确了

相关问题