Maison >base de données >tutoriel mysql >Comment puis-je implémenter la recherche en texte intégral sur les tables InnoDB à l'aide de MyISAM pour l'indexation ?
Recherche de type texte intégral sur InnoDB : une approche alternative
Bien que la recherche en texte intégral soit prise en charge nativement dans les tables MyISAM, les utilisateurs d'InnoDB peuvent être confrontés limitations lors de la tentative d’implémentation de fonctionnalités similaires. Pour relever ce défi, une solution intrigante émerge qui consiste à utiliser une table en texte intégral MyISAM pour ré-indexer dans une base de données InnoDB.
Création de tables InnoDB
L'étape initiale implique d’établir les tables InnoDB nécessaires. Ces tableaux serviront de référentiels de données de base. Par exemple, considérons le schéma suivant :
CREATE TABLE users (...) ENGINE=InnoDB; CREATE TABLE forums (...) ENGINE=InnoDB; CREATE TABLE threads ( forum_id SMALLINT UNSIGNED NOT NULL, thread_id INT UNSIGNED NOT NULL DEFAULT 0, user_id INT UNSIGNED NOT NULL, subject VARCHAR(255) NOT NULL, created_date DATETIME NOT NULL, next_reply_id INT UNSIGNED NOT NULL DEFAULT 0, view_count INT UNSIGNED NOT NULL DEFAULT 0, PRIMARY KEY (forum_id, thread_id) ) ENGINE=InnoDB;
Établissement d'une table de texte intégral
Ensuite, créez une table MyISAM dédiée à l'indexation de texte intégral. Cette table facilitera l'indexation des champs de table InnoDB spécifiés.
CREATE TABLE threads_ft ( forum_id SMALLINT UNSIGNED NOT NULL, thread_id INT UNSIGNED NOT NULL DEFAULT 0, subject VARCHAR(255) NOT NULL, FULLTEXT (subject), PRIMARY KEY (forum_id, thread_id) ) ENGINE=MyISAM;
Maintenir les données de la table
Pour assurer la synchronisation entre les tables InnoDB et MyISAM, implémentez des méthodes de mise à jour le tableau de texte intégral. Ceci peut être réalisé via des déclencheurs ou des processus par lots nocturnes.
Procédure stockée pour la recherche
Pour faciliter la fonctionnalité de recherche de type texte intégral, créez une procédure stockée dans MySQL . Cette procédure interrogera la table MyISAM, filtrera les résultats en fonction du terme de recherche fourni et renverra les correspondances les plus pertinentes.
DELIMITER # CREATE PROCEDURE ft_search_threads ( IN p_search VARCHAR(255) ) BEGIN SELECT t.*, f.title AS forum_title, u.username, MATCH(tft.subject) AGAINST (p_search IN BOOLEAN MODE) AS rank FROM threads_ft tft INNER JOIN threads t ON tft.forum_id = t.forum_id AND tft.thread_id = t.thread_id INNER JOIN forums f ON t.forum_id = f.forum_id INNER JOIN users u ON t.user_id = u.user_id WHERE MATCH(tft.subject) AGAINST (p_search IN BOOLEAN MODE) ORDER BY rank DESC LIMIT 100; END;
En appelant cette procédure stockée et en fournissant un terme de recherche, les utilisateurs peuvent récupérer des résultats pertinents. à partir des tables InnoDB.
Cette approche présente une alternative viable pour implémenter une fonctionnalité de recherche de type texte intégral dans les tables InnoDB, en exploitant les atouts d'InnoDB et de MyISAM. moteurs.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!