代码之家  ›  专栏  ›  技术社区  ›  brianreavis

使用InnoDB进行全文搜索

  •  94
  • brianreavis  · 技术社区  · 17 年前

    fulltext search capabilities ),但想到 整个表

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

    我应该使用第三方搜索系统吗?喜欢 Lucene(c++) / Sphinx LinkedIn的 zoie (基于Lucene)看起来是目前最好的选择 ……我是围绕实时功能构建的(这对我的应用程序来说非常关键。)我有点犹豫是否要提交,但还没有一些见解。..

    9 回复  |  直到 17 年前
        1
  •  57
  •   Jeremy Smyth    6 年前

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

    https://dev.mysql.com/doc/refman/5.6/en/innodb-fulltext-index.html .

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

        2
  •  50
  •   Ian Wilkes    17 年前

    我可以保证MyISAM全文是一个糟糕的选择——即使抛开MyISAM表的各种问题不谈,我也看到全文内容偏离了轨道,开始自我损坏,MySQL经常崩溃。

    一个专用的搜索引擎肯定是这里最灵活的选择——将帖子数据存储在MySQL/innodb中,然后将文本导出到您的搜索引擎。你可以很容易地设置定期的完整索引构建/发布,如果你觉得需要并想花时间的话,可以添加实时索引更新。

    Lucene和Sphinx都是不错的选择 Xapian ,既美观又轻便。如果你选择Lucene的路线,不要以为Clucene会更好,即使你不想与Java搏斗,尽管我真的没有资格讨论两者的优缺点。

        3
  •  11
  •   Bill Karwin    17 年前

    Sphinx让我失望的一点是,它不太支持增量插入。也就是说,在插入后重新索引非常昂贵,他们推荐的解决方案是将数据拆分为较旧的、不变的行和较新的、易失性的行。因此,你的应用程序进行的每次搜索都必须搜索两次:一次在较大的索引上搜索旧行,另一次在较小的索引上查找最近的行。如果这不能与您的使用模式集成,那么这个Sphinx就不是一个好的解决方案(至少在当前的实现中不是)。

    我想指出您可以考虑的另一种可能的解决方案: Google Custom Search 。如果您可以在web应用程序中应用一些SEO,那么请将索引和搜索功能外包给谷歌,并在您的网站中嵌入谷歌搜索文本字段。这可能是使您的网站可搜索的最经济和可扩展的方式。

        4
  •  3
  •   bobobobo    15 年前

    也许你不应该这么快就忽略MySQL的FT。 Craigslist used to use it .

    编辑

    如下所述,Craigslist似乎已经 switched to Sphinx

        5
  •  1
  •   Gregg Lind    17 年前

        6
  •  0
  •   Jim Blackler    15 年前

    试试这个

    ROUND((LENGTH(text) - LENGTH(REPLACE(text, 'serchtext', ''))) / LENGTH('serchtext'),0)!=0
    
        7
  •  0
  •   Muhammad    14 年前

        8
  •  0
  •   user1612250    13 年前

    如果其他一切都失败了,总有 soundex_match ,遗憾的是,这并不是真的很快准确

        9
  •  0
  •   MrCarrot    6 年前

    对于那些被困在旧版本的MySQL/MariaDB上的人(即CentOS用户),其中InnoDB不支持全文搜索,我在使用InnoDB表时的解决方案是为我想搜索的东西创建一个单独的MyISAM表。

    products 具有各种键和引用完整性。然后,我创建了一个简单的MyISAM表,名为 product_search 包含两个字段, product_id 和 product_name 后者被设置为 FULLTEXT 指数。这两个字段实际上都是主字段的副本 product 桌子。

    然后,我使用全文搜索MyISAM表,并对InnoDB表进行内部连接。

    MyISAM表的内容可以通过触发器或应用程序的模型保持最新。

    推荐文章