2010-05-22 84 views
2

我一直在做全文搜索的研究,因为我们意识到一系列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)

+0

我修复了“快速解决”问题,可以在这里找到: http://stackoverflow.com/questions/2891037/mysql-or-match-hangs-very-slow-on-multiple-tables – 2010-05-24 09:07:05

回答

2

对于短期的解决方案,我建议只创建全文值的表,如this question

对于长期的解决方案,请看看Solr。安装比Lucene容易得多,而且可以提供大部分功能。我也听说过狮身人面像的好东西,但还没有亲自使用它。

+0

伟大为长期解决方案!看起来我们可能会使用它,但从短期来看,这个链接只是指出你不能链接到同一个MATCH中的两个表,所以我需要弄清楚如何让它工作。当我使用或匹配它只需要永远(基本冻结),并在15分钟后回来 – 2010-05-24 00:13:10

相关问题