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

时间:2013-01-15 12:03:10

标签: mysql search innodb myisam

我有一个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条记录),狮身人面像等似乎有点矫枉过正。但是将每个记录放入一个数组并用PHP搜索它似乎也太多了。但也许你不同意。

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

1 个答案:

答案 0 :(得分:13)

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

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

这是the full monty

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