Полнотекстовый поиск MySQL по нескольким таблицам - быстрое / длинное решение? - PullRequest
2 голосов
/ 22 мая 2010

Я провел небольшое исследование полнотекстового поиска, так как мы поняли, что серия 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? Поиск по нескольким таблицам (лучшие практики)

1 Ответ

2 голосов
/ 23 мая 2010

Для краткосрочного решения я предлагаю создать таблицу только из полнотекстовых значений, как в этот вопрос .

Для долгосрочного решения, пожалуйста, посмотрите на Solr . Его гораздо проще установить, чем Lucene, и, тем не менее, он предоставляет вам большую часть своей функциональности. Я также слышал хорошие вещи о Сфинксе, но лично никогда не использовал его.

...