【问题标题】:Fulltext search with InnoDB in MySQL在 MySQL 中使用 InnoDB 进行全文搜索
【发布时间】:2012-12-29 12:36:47
【问题描述】:

我有一个 MySQL 数据库(版本 5.5.28),其表如下:

products (InnoDB)
-------------------------------------------------
search_id     title               description
1             Levi Blue Jeans     Some cool jeans 
2             Gucci Handbag       Great accessory
3             Prada Dress         Beautiful dress

我想在 MySQL 中做这样的事情:

SELECT MATCH(title) AGAINST ('Jeans') AS score, search_id, FROM search WHERE MATCH(title) AGAINST ('Jeans' IN BOOLEAN MODE)

据我所知,您只能在 MyISAM 中执行此操作。是否可以使用 InnoDB 进行类似的搜索,而无需求助于:

对于我的应用程序(大约 1000 - 2000 条记录)Sphinx 等似乎有点矫枉过正。但是将每条记录放入一个数组并用 PHP 搜索它似乎也太多了。但也许你不同意。

PS。 LIKE 似乎不适合我。结果通常不太准确,您无法像 MATCH 那样获得分数。

【问题讨论】:

  • 看起来 MySQL 6 将支持一些fulltext features,但与此同时您可能不得不使用其他东西。

标签: mysql search innodb myisam


【解决方案1】:

products 中的文本列复制到一个新的 MyISAM 表中。 两者之间建立1-1的关系,并且为了保证InnoDB提供的ACID'ity,确保你总是和products一起访问MyISAM表。

您可能希望在products 上添加触发器以保持双射。您还可以创建一个视图,以便在升级到 MySQL v5.6 时将应用程序中的返工降至最低(并放弃这种复杂的解决方法)。

这里是the full monty

您可以完全移动它(即从products 中删除它),而不是复制文本列。这会更有效,但当您想升级时,切换到仅 InnoDB 的解决方案也会变得更加复杂。

【讨论】:

  • 一个棘手问题的超级简单解决方案。奇迹般有效。 :)
猜你喜欢
  • 2010-11-25
  • 1970-01-01
  • 2011-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多