Я провел небольшое исследование полнотекстового поиска, так как мы поняли, что серия 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
Если я удаляю d.name
из оператора MATCH
, это работает. У меня есть полнотекстовый индекс в этом столбце.
Я видел, как в одной из статей говорится, что для этой таблицы нужно использовать OR MATCH
, но не утратит ли это эффективность возможности ранжировать их вместе или сопоставить их должным образом?
В других местах сказано использовать UNION
s, но я не знаю, как это сделать правильно.
Любой совет будет принят с благодарностью.
В идее долгосрочного решения кажется, что Сфинкс или Люсен лучше. Теперь я ни в коем случае не являюсь гуру MySQL, и я слышал, что Lucene немного сложнее в настройке, любые рекомендации или указания были бы хорошими.
Статьи:
Полнотекстовый поиск MySQL по нескольким таблицам
MySQL FULLTEXT Поиск по> 1 таблице
MySQL: как сделать полнотекстовый поиск в нескольких таблицах
Сравнение полнотекстового поискового движка - Lucene, Sphinx, Postgresql, MySQL?
Поиск по нескольким таблицам (лучшие практики)