【问题标题】:MySQL Full-Text Search Across Multiple Tables - Quick/Long Solution?跨多个表的 MySQL 全文搜索 - 快速/长期解决方案?
【发布时间】:2011-02-22 18:54:13
【问题描述】:

我一直在对全文搜索进行一些研究,因为我们意识到一系列 LIKE 语句很糟糕。我的第一个发现是 MySQL 全文搜索。我试图实现这一点,它在一个表上工作,当我尝试加入多个表时失败了,所以我查阅了 stackoverflow 的文章(查看最后我去过的那些的列表)

我没有看到任何可以明确回答我问题的内容。我试图在一两个小时内完成这项工作(快速解决方案),但我也想做一个更好的长期解决方案。这是我的查询:

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,但这不会失去将它们排列在一起或正确匹配它们的有效性吗?

据说其他地方可以使用UNIONs,但我不知道如何正确使用。

任何建议将不胜感激。


在长期解决方案的想法中,Sphinx 或 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)

【问题讨论】:

标签: mysql full-text-search lucene sphinx


【解决方案1】:

对于短期解决方案,我建议创建一个仅包含全文值的表格,如this question

关于长期解决方案,请查看Solr。它比 Lucene 更容易安装,并且为您提供了它的大部分功能。我也听说过关于 Sphinx 的好消息,但没有亲自使用过。

【讨论】:

  • 非常适合长期解决方案!看起来我们可能会在短期内使用它,但是,该链接只是指出您不能链接到同一个 MATCH 中的 2 个表,所以我需要弄清楚如何使它工作。当我使用 OR MATCH 时,它只需要永远(基本上冻结)并在 15 分钟后回来
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-10
  • 1970-01-01
  • 2011-02-07
  • 2019-10-17
  • 2012-02-19
  • 2013-02-15
  • 1970-01-01
相关资源
最近更新 更多