Le moteur de stockage InnoDb à de nombreux avantages mais pas celui de permettre la recherche fulltext pourtant extrêmement pratique lorsque l’on souhaite faire un petit moteur de recherche sur son application !
Ne pouvant me séparer de l’intégrité référentielle du moteur innodb, il m’a fallut trouver une solution.
Etant en mysql 5 le plus simple à été de créer une table de « recherche » avec le moteur myisam.
C’est une table allégée qui ne contient que les id et les champs textes à indexer.
Afin de garder cette table constamment à jour par rapport à la table originelle , il suffit de créer 3 triggers pour les 3 grandes opérations :
--Insertion CREATE TRIGGER bug_search_insert AFTER INSERT ON bugs FOR EACH ROW INSERT INTO bugs_search SET idBug = NEW.id, description = NEW.description
--Update CREATE TRIGGER bug_search_update AFTER UPDATE ON bugs FOR EACH ROW UPDATE bugs_search SET idBug = OLD.id, description = NEW.description WHERE id = OLD.id
--Delete CREATE TRIGGER bug_search_delete AFTER DELETE ON bugs FOR EACH ROW DELETE FROM bugs_search WHERE id = OLD.id
Ainsi chaque modification dans la table au moteur innodb sera répercutée dans la table au moteur myIsam. On perd évidemment en performance puisque que l’on doit travailler sur une table supplémentaire, mais on gagne la recherche fulltext sans sacrifier l’intégrité référentielle !
Détails de la création d’un trigger :
CREATE TRIGGER (1) (2) ON (3) FOR EACH ROW (4)
1- Nom du trigger , doit être unique
2- Moment de déclenchement, par exemple AFTER INSERT , BEFORE UPDATE ….
3- Table « déclenchante »
4- Requête à exécuter pour chaque ligne
Salut, j'ai fait une banque de Curriculum Vitae en ligne en asp.net et j'ai utilisé une BD MySQL. J'ai utilisé la technique mentionnée plus haut et ça fonctionne vraiment bien! Merci!
Essayez la recherche full text, très rapide : http://www.cv-informatique-quebec.com
Parfait ! un grand merci pour ce petit tutoriel.