前言
1:为什么要讲fst和skiplist
检索的倒排结构通常包含两种结构,一个是词典(一般要加载到内存),一个是倒排表。如下图
一次查询需要经历两个阶段,找到词典的位置(或者叫判断这个词存不存在),比如输入Lucene,先要找到这个词存在的位置。词典的存储结构就有两种实现方式,fst或跳表。Lucene3.0之前使用的是跳跃表结构,后换成了FST,但跳跃表在Lucene其他地方还有应用如倒排表合并和文档号索引。@hxx 跳跃表加速合并,因为布尔查询时,and 和or 操作都需要合并倒排表,这时就需要快速定位相同文档号,所以利用跳跃表来进行相同文档号查找
2:两者在Lucene中各占据什么位置?关系是怎样的
都是或者曾经是词典数据结果的实现方式,现在各自在Lucene中占据一席之地。没有啥关系,看优缺点吧!
skiplist优点:结构简单、跳跃间隔、级数可控,Lucene3.0之前使用的也是跳跃表结构,后换成了FST,但跳跃表在Lucene其他地方还有应用如倒排表合并和文档号索引。 skiplist 缺点:模糊查询支持不好
skiplist优点:内存占用率低,压缩率一般在3倍~2