Я занимаюсь исследованиями полнотекстового поиска, поскольку мы поняли, что серия предложений 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
Если удалить d.name
из MATCH
заявления он работает. У меня есть полнотекстовый индекс в этом столбце.
Я видел, что одна из статей говорит, что для этой таблицы используется OR MATCH
, но разве это не потеряет эффективность того, чтобы иметь возможность ранжировать их вместе или соответствовать им правильно?
Другие места, которые, как говорят, используют UNION
, но я не знаю, как это сделать должным образом.
Любые советы были бы весьма полезными.
В идее долгосрочного решения кажется, что либо 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)
Я исправил проблему «быстрого решения», которую можно найти здесь: http://stackoverflow.com/questions/2891037/mysql-or-match-hangs-very-slow-on-multiple-tables –