2010-05-22 3 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

Если удалить 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)

+0

Я исправил проблему «быстрого решения», которую можно найти здесь: http://stackoverflow.com/questions/2891037/mysql-or-match-hangs-very-slow-on-multiple-tables –

ответ

2

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

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

+0

Great для долгосрочного решения! Похоже, мы, вероятно, будем использовать его, однако в краткосрочной перспективе эта ссылка просто указала, что вы не можете ссылаться на 2 таблицы в одном и том же MATCH, поэтому мне нужно выяснить, как я могу заставить его работать. Когда я использую OR MATCH, он просто берет навсегда (замораживает по существу) и возвращается примерно через 15 минут –

Смежные вопросы