mysql通过数值比较,范围检索可以满足很多查询的需要,但如果需要关键字匹配过滤,则需要基于相似度的查询,全文索引就是这样设计的。
全文索引最常见的地方是搜索引擎,这种搜索引擎后面通常没有关系数据库,但原理一致。 mysql5.6或更早版本仅支持myisam引擎的全文索引,而5.6或更高版本的innodb支持全文索引。 所以以下都是基于myisam引擎的全文索引介绍。
myisam全文索引的目标是“全文集合”,这可能是数据表中一列或多列的数据。 具体来说,就是将所有编制了一个数据索引的列组合成一个字符串进行索引。
myisam的全文索引分为两个层次,第一个层次是关键字,第二个层次是对应于每个关键字的“文档指针”。 全文索引并不使用文档对象中的所有单词,而是根据规则过滤某些单词。 过滤规则如下。
1、禁止使用单词列表中的单词不加索引。 默认情况下,根据常规英语设置,还可以使用参数ft_stopword_file指定外部文件来定义禁止使用的单词。
2、排除单词长度大于ft_min_word_len、小于ft_max_word_len的单词
自然语言索引:
选择id、title、right(body,25 ) match (title,body ) against (‘factory casualties’) asrelevancefrompostswherematch
上面的sql语句在title,body字段中查找与factory和casualties匹配的数据,以及relevance作文查询结果的相关输出。 与常规查询不同,此类查询会自动根据相关性进行排序。
除非同一sql语句在子句中出现match关键字,否则其他地方出现match不会产生额外的消耗。
布尔全文索引:
创建布尔全文索引时,可以使用关键字前面的前缀修饰符来自定义搜索。
上一个自然语言搜索的sql与同时包含factory和casualties的数据相匹配。 要得到必须同时包含两个单词的结果,sql如下所示:
选择id、title、right(body,25 ) frompostswherematch ) title、body ) against (‘factory casualties’inbooleanmode );