我一直在做全文搜索的研究,因为我们意识到一系列LIKE语句很糟糕。我的第一个发现是MySQL全文搜索。我试图实现这一点,它在一张桌子上工作,当我尝试加入多张桌子时失败,因此我查阅了stackoverflow的文章(查看最后列出的我已经去过的列表)跨多个表的MySQL全文搜索 - 快速/长期解决方案?
I没有看到任何明显回答我的问题的东西。我试图在一两个小时内完成这个工作(快速解决方案),但我也想做一个更好的长期解决方案。这里是我的查询:
SELECT
a.`product_id`, a.`name`, a.`slug`, a.`description`, b.`list_price`,
b.`price`, c.`image`, c.`swatch`, e.`name` AS industry
FROM `products` AS a
LEFT JOIN `website_products` AS b ON (a.`product_id` = b.`product_id`)
LEFT JOIN
(SELECT `product_id`, `image`, `swatch` FROM `product_images`
WHERE `sequence` = 0) AS c ON (a.`product_id` = c.`product_id`)
LEFT JOIN `brands` AS d ON (a.`brand_id` = d.`brand_id`)
INNER JOIN `industries` AS e ON (a.`industry_id` = e.`industry_id`)
WHERE
b.`website_id` = 96
AND b.`status` = 1
AND b.`active` = 1
AND MATCH(a.`name`, a.`sku`, a.`description`, d.`name`) AGAINST ('ashley sofa')
GROUP BY a.`product_id`
ORDER BY b.`sequence` LIMIT 0, 9
我得到的错误是:Incorrect arguments to MATCH
如果我从MATCH
声明它的工作原理去除d.name
。我在该专栏有一个全文索引。
我看到其中一篇文章说这张表使用OR MATCH
,但是这不会失去将它们排列在一起或匹配它们的效果吗?
其他地方说使用UNION
s,但我不知道如何做到这一点。
任何意见将不胜感激。
在长期解决方案的想法看来,狮身人面像或Lucene是最好的。现在绝不是,我是一名MySQL专家,我听说Lucene的设置稍微复杂一点,任何推荐或指导都会很棒。
文章:
MySQL full text search across multiple tables MySQL FULLTEXT Search Across >1 Table MySQL: how to make multiple table fulltext search Comparison of full text search engine - Lucene, Sphinx, Postgresql, MySQL? Searching across multiple tables (best practices)
我修复了“快速解决”问题,可以在这里找到: http://stackoverflow.com/questions/2891037/mysql-or-match-hangs-very-slow-on-multiple-tables – 2010-05-24 09:07:05