mysql - 使用 MySQL InnoDB 进行 Django 全文搜索

标签 mysql django

如何配置 Django 以使用 MySQL-InnoDB 进行全文搜索。 MySQL Myisam 引擎支持全文搜索,但我将使用 InnoDB。这是使用 Sphinx 的最佳方式吗?如果您解释您的配置,我将不胜感激。 (顺便说一下,我也想知道它是如何与 postgresql 一起工作的。)

最佳答案

虽然可以配置为自动与 MySQL 对话,但 Sphinx 实际上是 MyISAM 或 InnoDB 的独立工具。它提供了比 MyISAM 中简单的全文搜索更好的处理和性能,但当然代价是同时基于搜索和数据库的条件查询变得困难。您可以使用 SphinxSE(存储引擎)通过 MySQL 进行查询和连接,但它不如将其保留在数据库引擎中灵活,并且连接性能不佳。

否则,您可以采用 MyISAM 和 InnoDB 的混合方法。将所有规范数据放入适当的 InnoDB 表中,仅使用 MyISAM 存储全文搜索诱饵。对于正常操作,您只需触摸 InnoDB 内容;只有在进行全文搜索时才需要加入 MyISAM 表。然后,您必须确保在成功事务后从插入到 InnoDB 表中的任何新文本更新 MyISAM 表。

虽然 MyISAM 中缺乏事务支持偶尔会导致数据在并发或错误情况下不一致(这种危险显然也适用于单独的全文存储解决方案,如 Sphinx、Lucene 等),但这在现实中并不是一个大问题因为只有搜索诱饵变得不一致,而不是您的实际数据。您还可以借此机会以不同方式处理您的全文内容,例如通过应用普通词干提取,因为 MySQL 本身并没有实现它。

PostgreSQL 有自己内置的基于@@ 运算符的全文内容。它的速度不及 Sphinx 的速度,但在功能(例如词干提取、字典、更好地处理相关值)方面远远领先于 MyISAM FULLTEXT,而且您仍然可以将它与其他查询条件自由组合。

关于mysql - 使用 MySQL InnoDB 进行 Django 全文搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1907205/

相关文章:

php - AsyncTask异常RuntimeException

php - 获取插入 MySQL 数据库的最后一条记录的 ID

php - 通过PHP上传导入.sql文件

php mssql mysql集成错误

django - 找不到标签为 XYZ 的应用

Django logger.error 不会将日志记录条目保存到 debug.log 文件中

python - 为什么 Django 的用户模型将电子邮件字段设置为非唯一?

mysql - 确定什么是向 mysql 表中插入空白行?

django - 安装 django.contrib.comments 应用程序后无法同步我的 django 数据库

python - 参数为none时查询django