在MySQL中使用InnoDB进行全文搜索

Cud*_*dos 7 mysql search myisam innodb

我有一个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
Run Code Online (Sandbox Code Playgroud)

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

SELECT MATCH(title) AGAINST ('Jeans') AS score, search_id, FROM search WHERE MATCH(title) AGAINST ('Jeans' IN BOOLEAN MODE)
Run Code Online (Sandbox Code Playgroud)

据我所知,你只能在MyISAM中做到这一点.是否可以使用InnoDB进行类似的搜索,而无需采取以下措施:

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

PS.LIKE对我来说似乎不太好用.结果通常不太准确,你不能用MATCH获得分数.

Ran*_*eed 13

将文本列复制products到新的MyISAM表.在两者之间建立1-1关系,并且,为了确保InnoDB提供的ACID,请确保始终一起访问MyISAM表products.

您可能希望添加触发器products以维持双射.您还可以创建一个视图,以便在升级到MySQL v5.6时,在应用程序中返工最少(并删除这个错综复杂的解决方法).

这是完整的monty.

您可以完全移动它(而不是复制文本列),而不是复制文本列products.这样会更有效率,但是当您想要升级时,它也会使切换到仅支持InnoDB的解决方案变得更加复杂.