我有一个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获得分数。
答案 0 :(得分:13)
将文本列从products
复制到新的MyISAM表。
在两者之间建立1-1关系,并且为了确保InnoDB提供的ACID,请确保始终与products
一起访问MyISAM表。
您可能希望在products
上添加触发器以维持双向投射。您还可以创建一个视图,以便在升级到MySQL v5.6时,在应用程序中返工最少(并放弃这个复杂的解决方法)。
您可以完全移动文本列,而不是复制文本列(将其从products
中删除,即)。这样会更有效率,但是当你想要升级时,它也会变得更加复杂,只需转换到InnoDB解决方案。