全文检索

搜索引擎需要根据用户输入的关键字进行全文查找,电子商务网站需要根据用户的查询条件,

在商品详细介绍中进行全文查找,这些都不是B+树索引能很好完成的。

InnoDB 1.2.x版本开始,InnoDB存储引擎开始支持全文检索(Full-Text Search)。

倒排索引

全文检索通常使用倒排索引(inverted index)来实现。倒排索引同B+树索引一样,

也是一种索引结构。它在辅助表(auxiliary table)中存储了单词与单词自身在一个或多个

文档中所在位置之间的映射。通常利用关联数组实现,其拥有两种表现形式:

  • inverted file index,其表现形式为{单词,单词所在文档的ID}
  • full inverted index,其表现形式为{单词,(单词所在文档的ID,在具体文档中的位置)}

InnoDB 全文检索

InnoDB存储引擎从1.2.x版本开始支持全文检索的技术,其采用full inverted index的方式。

InnoDB存储引擎中,为了提高全文检索的性能,使用了六张辅助表(auxiliary table),

根据wordLatin编码进行分区。

auxiliary table是持久化的表,然而在InnoDB的全文索引中,还有FTS Index Cache

(全文检索索引缓存),用于提高性能。FTS Index Cache是一个红黑树结构。

InnoDB 存储引擎的全文索引的限制

  • 每张表只能有一个全文检索的索引
  • 由多列组合而成的全文检索的索引列必须使用相同的字符集与排序规则
  • 不支持没有单词界定符的语言,如中文、日语、韩语等

全文检索的语法

MATCH (col1,col2,...) AGAINST (expr [search_modifier])
search_modifier : {
    IN NATURAL LANGUAGE MODE |
    IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION |
    IN BOOLEAN MODE |
    WITH QUERY EXPANSION
}