面试题答案
一键面试MySQL全文检索工作原理
- 分词:MySQL首先会对要检索的文本进行分词操作,将文本按照一定规则拆分成一个个单词或词条(token)。例如对于句子“我爱编程”,可能会分成“我”“爱”“编程”等词条。
- 索引构建:将拆分后的词条与包含这些词条的文档(在MySQL中通常是表中的行记录)建立关联,形成索引数据结构。
- 检索匹配:当执行全文检索查询时,同样对查询语句进行分词,然后在索引中查找匹配的词条,并根据索引中记录的关联信息找到对应的文档。
倒排索引的作用
- 快速定位:倒排索引是一种以词条为键,文档列表为值的数据结构。例如词条“编程”对应包含“编程”的文档ID列表。在全文检索时,通过倒排索引能快速定位到包含特定词条的所有文档,大大提高检索效率,避免全表扫描。
- 支持复杂查询:可以方便地对多个词条进行逻辑组合(如AND、OR等)查询。例如要查找同时包含“编程”和“数据库”的文档,通过倒排索引获取两个词条对应的文档列表后进行交集运算即可。
在MySQL中创建全文索引
- 创建表时添加全文索引:
CREATE TABLE articles (
id INT NOT NULL AUTO_INCREMENT,
title VARCHAR(200),
body TEXT,
PRIMARY KEY (id),
FULLTEXT(title, body)
) ENGINE=InnoDB;
- 对已存在的表添加全文索引:
ALTER TABLE articles ADD FULLTEXT(title, body);
注意:MySQL的全文索引目前只支持InnoDB和MyISAM存储引擎。
在MySQL中使用全文索引实现全文检索
- 使用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
等模式,可根据具体需求选择。