J'ai fait un peu de recherche sur les recherches de texte intégral car nous avons réalisé qu'une série d'instructions LIKE sont terribles. Ma première trouvaille était des recherches en texte intégral MySQL. J'ai essayé d'implémenter ceci et cela a fonctionné sur une table, échoué quand j'essayais de joindre plusieurs tables, et donc j'ai consulté les articles de stackoverflow (regardez la fin pour une liste de ceux que j'ai été)Recherche de texte intégral MySQL sur plusieurs tables - Solution rapide/longue?
I n'a rien vu qui ait clairement répondu à mes questions. J'essaie de faire cela littéralement dans une heure ou deux (solution rapide) mais je veux aussi faire une meilleure solution à long terme. Voici ma question:
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
L'erreur que je reçois est: Incorrect arguments to MATCH
Si je retire d.name
de la déclaration MATCH
cela fonctionne. J'ai un index de texte intégral sur cette colonne.
J'ai vu l'un des articles dire d'utiliser un OR MATCH
pour cette table, mais cela ne va-t-il pas être difficile de les classer ensemble ou de les faire correspondre correctement?
D'autres endroits ont dit utiliser UNION
s mais je ne sais pas comment le faire correctement.
Un conseil serait grandement apprécié. Dans l'idée d'une solution à long terme, il semble que Sphinx ou Lucene est le meilleur. Maintenant, en aucun cas et je suis un gourou MySQL, et j'ai entendu dire que Lucene est un peu plus compliqué à configurer, toutes les recommandations ou les directions seraient géniales.
Articles:
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)
J'ai résolu le problème de "solution rapide", qui peut être trouvé ici: http://stackoverflow.com/questions/2891037/mysql-or-match-hangs-very-slow-on-multiple-tables –