MST

星途 面试题库

面试题:MySQL中全文检索与倒排索引的基本原理

请简要阐述MySQL全文检索的工作原理,以及倒排索引在其中起到的作用。同时,说明在MySQL中如何创建和使用全文索引来实现全文检索功能。
10.8万 热度难度
数据库MySQL

知识考点

AI 面试

面试题答案

一键面试

MySQL全文检索工作原理

  1. 分词:MySQL首先会对要检索的文本进行分词操作,将文本按照一定规则拆分成一个个单词或词条(token)。例如对于句子“我爱编程”,可能会分成“我”“爱”“编程”等词条。
  2. 索引构建:将拆分后的词条与包含这些词条的文档(在MySQL中通常是表中的行记录)建立关联,形成索引数据结构。
  3. 检索匹配:当执行全文检索查询时,同样对查询语句进行分词,然后在索引中查找匹配的词条,并根据索引中记录的关联信息找到对应的文档。

倒排索引的作用

  1. 快速定位:倒排索引是一种以词条为键,文档列表为值的数据结构。例如词条“编程”对应包含“编程”的文档ID列表。在全文检索时,通过倒排索引能快速定位到包含特定词条的所有文档,大大提高检索效率,避免全表扫描。
  2. 支持复杂查询:可以方便地对多个词条进行逻辑组合(如AND、OR等)查询。例如要查找同时包含“编程”和“数据库”的文档,通过倒排索引获取两个词条对应的文档列表后进行交集运算即可。

在MySQL中创建全文索引

  1. 创建表时添加全文索引
CREATE TABLE articles (
    id INT NOT NULL AUTO_INCREMENT,
    title VARCHAR(200),
    body TEXT,
    PRIMARY KEY (id),
    FULLTEXT(title, body)
) ENGINE=InnoDB;
  1. 对已存在的表添加全文索引
ALTER TABLE articles ADD FULLTEXT(title, body);

注意:MySQL的全文索引目前只支持InnoDB和MyISAM存储引擎。

在MySQL中使用全文索引实现全文检索

  1. 使用MATCH AGAINST语法
SELECT * FROM articles
WHERE MATCH(title, body) AGAINST('编程 数据库' IN NATURAL LANGUAGE MODE);

这里MATCH AGAINST语法是MySQL专为全文检索设计的,相比普通的LIKE查询,效率更高。NATURAL LANGUAGE MODE表示使用自然语言模式进行检索。还可以使用IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION来开启查询扩展,以获取更相关的结果。另外,还有IN NATURAL LANGUAGE MODE WITH NATURAL LANGUAGE MODE等模式,可根据具体需求选择。