7

我有一个 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 一样获得分数。

4

1 回答 1

13

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

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

这是完整的 monty

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

于 2013-01-19T12:10:34.283 回答