当前位置: 首页 > 面试题库 >

使用InnoDB进行全文搜索

司徒瀚
2023-03-14
问题内容

我正在开发一个高容量的Web应用程序,其中的一部分是讨论帖子的MySQL数据库,该数据库需要平稳地增长到2000万+行。

我本来打算对表使用MyISAM(用于内置的全文本搜索功能),但是由于单个写入操作而使 整个表
被锁定的想法使我陷入困境。行级锁具有更大的意义(更不用说InnoDB在处理大型表时的其他速度优势)。因此,基于这个原因,我决心使用InnoDB。

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

我应该使用第三方搜索系统吗?像Lucene(c ++) /
Sphinx吗?你们中的任何数据库忍者有任何建议/指导吗? LinkedIn的
zoie(基于Lucene)看起来是目前的最佳选择
…是围绕实时功能构建的(这对于我的应用程序来说非常关键。)我有点犹豫,但没有任何见识…

(仅供参考:将在具有高内存绑定的EC2上使用PHP服务前端)


问题答案:

我可以保证MyISAM全文是一个不好的选择-甚至不考虑MyISAM表的各种问题,我已经看到了全文问题,并开始破坏自身并定期使MySQL崩溃。

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

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



 类似资料:
  • 供参考:我的代码和这个so帖子非常相似。 谢谢

  • 我是sparql的新手,我正在尝试在其中一个属性中搜索一个单词。简单的查询工作良好,但我不知道如何执行全文搜索。我在jena网站上看到了这个例子:

  • 问题内容: 我想使用ElasticSearch搜索文件名(而不是文件的内容)。因此,我需要找到文件名的一部分(完全匹配,没有模糊搜索)。 示例: 我有以下名称的文件: 现在,我要搜索以获取前两个文件。 搜索或应返回除最后一个文件名以外的所有文件名。 如何使用ElasticSearch做到这一点? 这是我测试过的,但始终返回零结果: 问题答案: 您粘贴的内容存在各种问题: 1)不正确的映射 创建索引

  • 我在建立一个简单的地址数据库。有一个名为的类,其中的地址被分解为字段(street、city、state、ZIP)。每个字段都是字符串类型。 我想能够搜索地址中的任何一个字。例如:查找地址,无论搜索的词是在街道名称或城市名称等。换句话说,我希望用户能够轻松搜索,而不必指定他们感兴趣的地址的哪一部分。 但是当我执行以下查询时,我不会得到结果或错误消息: =>没有结果,应该是2条邮政编码为46250和

  • 问题内容: 我的目标是将MSSQL全文功能与HQL一起使用。在哪种情况下,我编写了一个特定的SQLFunction,将我的“全文”函数映射到contains函数。 但是,问题在于,在HQL中(似乎)我必须明确使用返回类型,MSSQL Contains函数不使用或不接受该返回类型。 这就是它在MSSQL中的工作方式: 这是我在HQL中使用它的想法: 这不起作用,因为HQL需要返回类型。例如,这将在H

  • 用git grep 命令查找Git库里面的某段文字是很方便的. 当然, 你也可以用unix下的'grep'命令进行搜索, 但是'git grep'命令能让你不用签出(checkout)历史文件, 就能查找它们. 例如, 你要看 git.git 这个仓库里每个使用'xmmap'函数的地方, 你可以运行下面的命令: $ git grep xmmap config.c: co