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 ?

Comment puis-je implémenter la recherche en texte intégral sur les tables InnoDB à l'aide de MyISAM pour l'indexation ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-22 05:13:09235parcourir

How Can I Implement Full-Text Search on InnoDB Tables Using MyISAM for Indexing?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn