【问题标题】:Best way to emulate fulltext search in a InnoDB/MySQL database using Codeigniter使用 Codeigniter 在 InnoDB/MySQL 数据库中模拟全文搜索的最佳方法
【发布时间】:2012-07-31 16:00:27
【问题描述】:

我正在 codeigniter php 框架中构建一个电子商务系统,它需要一个完整的产品搜索。我在 MySQL 数据库中使用了 InnoDB 引擎,因为它的优点是支持外键来强制引用完整性或行锁定而不是表锁定,但它不支持全文索引:'(

唯一的问题是我需要搜索产品表以进行站点搜索,因此我需要一种替代全文索引的方法,该方法也与 Codeigniter 兼容。有没有人有任何建议?我已经研究过创建一个单独的可搜索表和 Sphinx,但它们看起来令人困惑:S

编辑

与主机核对后,我无法使用 Sphinx,因为该站点位于共享主机上,并且我的主机提供商不允许安装,因为它需要 root 级别权限,并且他们不会进行系统范围的安装,因为它是第三方,他们不能保证它的安全性。

【问题讨论】:

  • 如果您有能力为您的搜索引擎添加一个额外的进程/守护进程,我绝对推荐使用 sphinx
  • @Lepidosteus 我无法使用 Sphinx,因为该站点位于共享主机上,并且我的托管服务提供商不允许安装,因为它需要 root 级别权限,并且他们不会进行系统范围的安装它是第 3 方,他们不能保证它的安全性。
  • 大多数其他框架使用单独的 MyISAM 表,包含搜索关键字甚至全文。例如 Magento 有一些 xxx_flat-tables 用于搜索目的; TYPO3 在xxx_index-tables 上做同样的事情。
  • 你运行的是什么版本的 MySQL?从 5.6.4 版开始,InoDB 支持全文搜索:blogs.innodb.com/wp/2011/12/…
  • 这太糟糕了...也许您可以询问您的主机是否可以将您放在另一台具有较新版本的服务器上?不久前,当我的站点所在的服务器不支持我需要的 PHP 版本时,这发生在我身上。他们免费为我迁移,所以问一下也无妨!

标签: php mysql codeigniter search innodb


【解决方案1】:

我建议你简单地更新你的 MySQL。 InnoDB full-text search (FTS) is finally available in MySQL 5.6.4 release.

这些索引在物理上表示为整个 InnoDB 表,由 SQL 关键字进行操作,例如 CREATE INDEX 语句的 FULLTEXT 子句、SELECT 语句中的 MATCH() ... AGAINST 语法和 OPTIMIZE TABLE 语句. 来自FULLTEXT Indexes

【讨论】:

    【解决方案2】:

    最简单的方法是为产品的文本数据创建一个 MyISAM 表,并针对它运行搜索查询。然后你可以每天用一个 cron 作业重建 MyISAM 表中的数据,以确保一致性。或者您可以让您的模型在每次更新时更新 MyISAM 表中的数据。

    【讨论】:

      猜你喜欢
      • 2011-02-07
      • 2012-12-29
      • 1970-01-01
      • 2010-09-14
      • 1970-01-01
      • 1970-01-01
      • 2010-11-13
      • 1970-01-01
      • 2011-07-03
      相关资源
      最近更新 更多