Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Melaksanakan Carian Teks Penuh pada Jadual InnoDB Menggunakan MyISAM untuk Pengindeksan?

Bagaimanakah Saya Boleh Melaksanakan Carian Teks Penuh pada Jadual InnoDB Menggunakan MyISAM untuk Pengindeksan?

Susan Sarandon
Susan Sarandonasal
2024-12-22 05:13:09239semak imbas

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

Carian Seperti Teks Penuh di InnoDB: Pendekatan Alternatif

Walaupun carian teks penuh disokong secara asli dalam jadual MyISAM, pengguna InnoDB mungkin menghadapi had apabila cuba melaksanakan fungsi yang serupa. Untuk menangani cabaran ini, penyelesaian menarik muncul yang melibatkan penggunaan jadual teks penuh MyISAM untuk mengindeks kembali ke dalam pangkalan data InnoDB.

Mencipta Jadual InnoDB

Langkah awal melibatkan penubuhan jadual InnoDB yang diperlukan. Jadual ini akan berfungsi sebagai repositori data teras. Sebagai contoh, pertimbangkan skema berikut:

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;

Menubuhkan Jadual Teks Penuh

Seterusnya, buat jadual MyISAM khusus untuk pengindeksan teks penuh. Jadual ini akan memudahkan pengindeksan medan jadual InnoDB yang ditentukan.

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;

Mengekalkan Data Jadual

Untuk memastikan penyegerakan antara jadual InnoDB dan MyISAM, laksanakan kaedah untuk mengemas kini jadual teks penuh. Ini boleh dicapai melalui pencetus atau proses kelompok setiap malam.

Prosedur Tersimpan untuk Carian

Untuk memudahkan fungsi carian seperti teks penuh, buat prosedur tersimpan dalam MySQL . Prosedur ini akan menanyakan jadual MyISAM, menapis keputusan berdasarkan istilah carian yang disediakan dan mengembalikan padanan yang paling berkaitan.

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;

Dengan memanggil prosedur tersimpan ini dan menyediakan istilah carian, pengguna boleh mendapatkan semula hasil yang berkaitan. daripada jadual InnoDB.

Pendekatan ini memberikan alternatif yang berdaya maju untuk melaksanakan fungsi carian seperti teks penuh dalam jadual InnoDB, memanfaatkan kekuatan kedua-dua enjin InnoDB dan MyISAM.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melaksanakan Carian Teks Penuh pada Jadual InnoDB Menggunakan MyISAM untuk Pengindeksan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn