一、核心概念
1、索引是什么?
索引的作用是辅助快速检索数据,不同的索引形式(B\B+\倒排索引),实际上
就是数据结构不同,最终索引的落地形式还是文件,也就是不同的数据结构的文件数据,
就是不同的索引,适用于不同的场景。
2、B+树结构的索引能解决大数据检索的问题吗?
(1)、一般全文检索,检索的是文本,文本数据一般是比较大的,如果B+树的节点存储的是文本,那么会造成一个磁盘块存储不了多少数据,
最终造成B+树的深度增大.IO次数变多,搜索效率就会很慢。
(2)、B+树结构无法解决模糊检索的要求,用mysql里面的模糊匹配,很容易会造成全表扫描,搜索精准度差。
3、全文检索基本概念:
在数据存入的时候,索引系统扫描设定的字段,对字段进行分词处理,对分词项创建索引,索引指明数据的唯一标识/当前词项在文档中出现的频率和位置。
在查询数据的时候,根据查询的文本,对文本进行分词处理,然后去匹配索引,根据索引找到数据的唯一标识,最后通过唯一标识找出对应的数据。
4、倒排索引的结构
(1)、term index:
词项字典的索引,存在于内存中(磁盘中也会存在一份,后缀为.tip),实际上就是包含trem词项前缀的树形结构。根据term index可以快速定位到
某个offset(某个节点分支上)。通过Term Index 找到对应的Term Dictionary的 block(磁盘块),然后再去磁盘直接找到term,减少磁盘的随机读写次数,大大的提升查询效率。
term index的数据结构是FST(有限状态转换),实际上就是第一次插入数据的时候,根据分词形成一条连接线
后面再插入的时候,与前一个分词进行最大前缀匹配,发现没有匹配就直接插入,
发现可以匹配,就在最大匹配的分词节点上开辟一个分支,后面的分词就是另外一条连接路径。
FST的优点就在于压缩率好