Mysql recherche fulltext sur table InnoDb

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

2 réflexions sur « Mysql recherche fulltext sur table InnoDb »

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *