MST

星途 面试题库

面试题:MySQL中自然语言全文索引和布尔全文索引在查询语法上的主要区别

请阐述在MySQL中,自然语言全文索引和布尔全文索引在执行查询时,使用的语法有哪些不同点,并分别举例说明。
16.7万 热度难度
数据库MySQL

知识考点

AI 面试

面试题答案

一键面试

自然语言全文索引语法及示例

  • 语法:使用 MATCH AGAINST 语法,且查询模式为自然语言模式(默认)。基本语法为 MATCH(column_list) AGAINST('search_term' IN NATURAL LANGUAGE MODE)
  • 示例:假设有一个 articles 表,包含 titlecontent 列,并且对这两列创建了全文索引。
-- 查找包含 'computer science' 的文章
SELECT * FROM articles
WHERE MATCH(title, content) AGAINST('computer science' IN NATURAL LANGUAGE MODE);

布尔全文索引语法及示例

  • 语法:使用 MATCH AGAINST 语法,并指定查询模式为布尔模式 IN NATURAL LANGUAGE MODE。布尔全文索引支持更复杂的查询,如指定单词的出现与否、权重等。语法为 MATCH(column_list) AGAINST('search_term' IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION)
    • + 前缀:表示该词必须存在。
    • - 前缀:表示该词必须不存在。
    • 无符号词:表示该词是可选的,但存在时会增加相关性得分。
    • > 前缀:提高词的权重。
    • < 前缀:降低词的权重。
    • ~ 前缀:允许词的存在与否不影响相关性得分,但会改变得分计算方式。
    • * 后缀:表示词干搜索(匹配词的所有衍生形式)。
  • 示例
-- 查找包含 'computer' 但不包含 'physics' 的文章
SELECT * FROM articles
WHERE MATCH(title, content) AGAINST('+computer -physics' IN NATURAL LANGUAGE MODE);

-- 查找包含 'computer' 并且更重视 'algorithm' 的文章
SELECT * FROM articles
WHERE MATCH(title, content) AGAINST('computer >algorithm' IN NATURAL LANGUAGE MODE);

不同点总结

  1. 语法复杂度:布尔全文索引语法更复杂,支持多种修饰符来精细控制查询;自然语言全文索引语法相对简单,按自然语言理解方式匹配。
  2. 查询灵活性:布尔全文索引在查询条件设置上更灵活,可以精确指定单词的出现要求、权重等;自然语言全文索引基于自然语言处理方式,适合一般的文本搜索,对查询条件的控制相对较弱。