Lucene底层关键字数据结构(FST状态机) | 学习笔记

简介: 快速学习Lucene底层关键字数据结构(FST状态机)。

开发者学堂课程【Lucene知识精讲与实战(下)Lucene底层关键字数据结构(FST状态机)】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/701/detail/12352


Lucene底层关键字数据结构(FST状态机)

 

一、FST原理解析

1FST也叫状态机,从 Lucene4.0 开始用状态机的结构存储 Lucene 里面索引的关键词,现在用的也是。

2Lucene 现在采用的数据结构为 FST ,它的特点就是:

优点:内存占用率低,压缩率般在3-20倍之间、模糊查询支持好、查询快。

缺点:结构复杂、输入要求有序、更新不易。

3、已知 FST 要求输入有序,所以 Lucene 会将解析出来的文档单词预先排序,然后构建FST,假设输入为 abd,abe,acf,acg ,那么整个构建过程如下:

1a bb d

2)插入 abe

5.1.png

(3)插入 acf

4)插入 acg.

5.2.png

4、比如输入 heimachengxuyuan。

String inputValues[] = ("hei", "ma" ,"cheng","xu" , "yuan", "good"];

long outputValues[] = [0,1,2,3,4,5];

存储结果如下:

5.3.png

只是把上图的结构横过来,左边是起点,右边是终点,没有标数字的是第0个。

输入的数据如下:

hei/0

ma/1

cheng/2

xu/3

yuan/4

good/5

没有重复的字母,所以没有交叉点,如果有重复的直接连,比较节省空间,省内存,查的时候很好查,根据输入的内容直接找即可。类似于树形结构,状态机结构。

5、Lucene4.0 一直都用的状态及结构,存的关键字。

5.4.png

存完之后查询时速度非常快,通过关键字找文档号,找到文档,文档词在索引中有出现位置,学习了Lucene底层存储结构(高级)以及存储结构算法,关键字是按照一定结构存储的,取的时候速度比较快,关键字对应词是从哪个文档中找出来的,又对应文档号,通过文档编号找到对应的文档,文档的词的位置在索引中,直接就能找到。通过索引找文档,通过复杂的结构,查找速度是非常快的。

相关文章
|
1月前
|
存储 JSON NoSQL
redis基本数据结构(String,Hash,Set,List,SortedSet)【学习笔记】
这篇文章是关于Redis基本数据结构的学习笔记,包括了String、Hash、Set、List和SortedSet的介绍和常用命令。文章解释了每种数据结构的特点和使用场景,并通过命令示例演示了如何在Redis中操作这些数据结构。此外,还提供了一些练习示例,帮助读者更好地理解和应用这些数据结构。
redis基本数据结构(String,Hash,Set,List,SortedSet)【学习笔记】
|
4月前
|
算法 C语言
数据结构和算法——桶排序和基数排序(图示、伪代码、多关键字排序,基数排序代码)
数据结构和算法——桶排序和基数排序(图示、伪代码、多关键字排序,基数排序代码)
25 0
【数据结构】我的学习笔记-二叉树
【数据结构】我的学习笔记-二叉树
|
机器学习/深度学习 存储 算法
|
算法 前端开发
数据结构和算法的学习笔记(第四部分)
自学的数据结构和算法的学习笔记
数据结构和算法的学习笔记(第四部分)