MySQL 提供 FULLTEXT 搜索功能。它在包含文本的表中搜索与单词和短语最佳匹配的行。

第 32.1 节:简单的 FULLTEXT 搜索

SET @searchTerm = 'Database Programming';
SELECT
    MATCH (Title) AGAINST (@searchTerm IN NATURAL LANGUAGE MODE) AS Score,
    ISBN, Author, Title
FROM book
WHERE MATCH (Title) AGAINST (@searchTerm IN NATURAL LANGUAGE MODE)
ORDER BY MATCH (Title) AGAINST (@searchTerm IN NATURAL LANGUAGE MODE) DESC;

给定一个名为 book 的表,包含列 ISBN、Title 和 Author,此查询查找与术语 'Database Programming' 匹配的书籍,并按最佳匹配排序。

为此,Title 列上必须存在全文索引:

ALTER TABLE book ADD FULLTEXT INDEX Fulltext_title_index (Title);

第 32.2 节:简单的布尔模式搜索

SET @searchTerm = 'Database Programming -Java';
SELECT
    MATCH (Title) AGAINST (@searchTerm IN BOOLEAN MODE) AS Score,
    ISBN, Author, Title
FROM book
WHERE MATCH (Title) AGAINST (@searchTerm IN BOOLEAN MODE)
ORDER BY MATCH (Title) AGAINST (@searchTerm IN BOOLEAN MODE) DESC;

给定一个名为 book 的表,包含列 ISBN、Title 和 Author,此查询搜索标题中包含单词 'Database' 和 'Programming' 但不包含 'Java' 的书籍。

为此,Title 列上必须存在全文索引:

ALTER TABLE book ADD FULLTEXT INDEX Fulltext_title_index (Title);

第 32.3 节:多列 FULLTEXT 搜索

SET @searchTerm = 'Date Database Programming';
SELECT
    MATCH (Title, Author) AGAINST (@searchTerm IN NATURAL LANGUAGE MODE) AS Score,
    ISBN, Author, Title
FROM book
WHERE MATCH (Title, Author) AGAINST (@searchTerm IN NATURAL LANGUAGE MODE)
ORDER BY MATCH (Title, Author) AGAINST (@searchTerm IN NATURAL LANGUAGE MODE) DESC;

给定一个名为 book 的表,包含列 ISBN、Title 和 Author,此查询查找与术语 'Date Database Programming' 匹配的书籍,并按最佳匹配排序。最佳匹配包括 C. J. Date 教授所著的书籍。

(但其中一个最佳匹配可能是《约会博士的约会指南:如何从第一次约会到完美伴侣》。这显示了 FULLTEXT 搜索的一个局限性:它不试图理解词性或者索引词的含义。)

为此,Title 和 Author 列上必须存在全文索引:

ALTER TABLE book ADD FULLTEXT INDEX Fulltext_title_author_index (Title, Author);