innodb 06 索引-全文检索

全文检索

1、倒排索引

两种倒排索引。
inverted file index,其表现形式为{单词,单词所在文档的ID}
full inverted index,其表现形式为{单词,(单词所在文档的ID,在具体文档中的位置)}
普通全文检索表:{文档ID,text}
倒排文件索引关联数组:inverted file index{number,单词,单词所在文档的ID}
详细倒排索引关联数组:{number,单词,(单词所在文档的ID,在具体文档中的位置)}

innodb全文检索使用的是full inverted index。

2、innodb全文检索-底层结构。

innodb全文检索表:{word,ilist}。并且word字段是索引,
PS:ilist = (DocumentId,Position)
由于在ilist有位置信息,所以支持邻近搜索。

innodb辅助表(详细倒排索引表):word存放的表。innodb为提升并行性,一共设置了六张辅助表。个人理解:分词存放的表

FTS(FTS Index Cache,全文检索索引缓存,缓存详细倒排索引),其用来提高全文检索的性能。
FTS是一个红黑树结构,根据(word, list)排序。
插入:索引先更新到缓存中,而后InnoDB存储引擎会批量进行更新到辅助表中。
FTS Document innodb全文检索表:为了支持全文检索,必须有一个列与word进行映射,在InnoDB中这个列被命名为FTS_DOC_ID,其类型必须是BIGINT UNSIGNED NOT NULL,并且InnoDB存储引擎自动会在该列上加入一个名为FTS_DOC_ID_INDEX的Unique Index。
缓存更新:事务提交时将分词写入到FTS Index Cache
磁盘更新:当对全文检索进行查询时,Auxiliary Table首先会将在FTS Index Cache中对应的word字段合并到Auxiliary Table中,然后再进行查询
数据库关闭:在FTS中的数据库会同步到磁盘上的Auxiliary Table中。
数据库宕机:FTS尚未同步到磁盘。下次重启的之后,用户进行全文检索时,innodb会自动读取未完成的文档,进行分词操作,然后把分词结果放在FTS缓存中。
删除过程:删除FTS缓冲,将Auxiliary Table表中对应的额FTS_DOC_ID保存在delete Auxiliary Table中。
彻底删除:命令就是OPTIMIZE TABLE。(OPTIMIZE TABLE可能会耗时很长,可以设定其删除的数量。)
缓存大小:innodb_ft_cache_size用来控制FTS Index Cache的大小,默认值为32M。

3、语法

分词
innodb会把单词拆分进行存储,查找时,根据单词匹配。
相关性
如果一个查询,匹配到多条记录,是怎么返回呢?根据相关性、
word(查询关键字)是否在文档中出现、word在文档中出现的次、数word在索引列中的数量、多少个文档包含该word

模式:

a:表示查询带有指定word的文档–默认的检索模式

    SELECT * FROM test WHERE MATCH(title) AGAINST('what' in NATURAL LANGUAGE MODE);
    SELECT * FROM test WHERE MATCH(title) AGAINST('what');

B: Boolean当使用这种模式时,表示字符串前后的字符有特殊含义。比如要查找有Pease单词的记录

SELECT * FROM test WHERE MATCH(title) AGAINST('+Pease' in BOOLEAN MODE);
假设,我们需要查找有Pease,但是没有hot的记录呢?用+,-符号,分别表示一定存在,或者一定不存在
 SELECT * FROM test WHERE MATCH(title) AGAINST('+Pease -hot' in BOOLEAN MODE);

C: Query Expansion扩展查询。了解即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值