lucene为了能够是信息存储的空间更小,访问速度更快,用了一些小技巧,下面介绍一些技巧:
1. Prefix + Suffix
在保存Term Dictionary的时候,会保存几乎所有的词,这样索引文件会非常大,当某个词跟前面一个词拥有相同前缀的时候,后面的词仅仅保存前缀在词中得偏移,以及除了前缀之外的字符串。
比如存储如下几个词: term, termagancy, termagant, terminal .
按照正常的方法来存储,需要 4 + 10 + 9 + 8 = 29.
如果使用这个技巧, termagancy 被存储成 [4][a][g][a][n][c][y] 这样算下来一共使用了 4 + 7 + 2 + 5 = 18.
节省了 11 个char 的存储空间。
2. Delta
在lucene中需要保存很多整型的信息, 比如文档的id, Term的位置信息,当文档渐渐变多的时候,这些数字会越来越大,所占用的Byte也越来越多,Delta的意思就是两个整数,仅仅保存两个整数的差值.
比如: 5 9 11 存储为 5 4 2
3. markbit
某个值a后面可能存在b,也可能不存在, 需要一个标志位来表示是否存在b。
在lucene 中把a的值左移一位,空出最后一位作为标志位,表示后面是否跟随b,在这种情况下,a/2才是真正的值。
4. skip list
为了提高查询速度,lucene中有很多地方都是用了这种数据结构。
skip list 具有如下的特征:
1. 元素是按书序排列的,比如字母序或者从小到大。
2. 跳跃表是有间隔的,间隔是事先配置好的。
3. 跳跃表是有层次的,每一层指定间隔的元素构成上一层。
lucene中得定义:
间隔: 上层两个元素之差,再加一。
层数: 不包括原来链表层, 上面的层从0来时累加。
跳跃表比顺序查询,大大调高了搜索的效率.
比如查找元素72,应用跳表之后只需要访问第一层的50 ,然后发现50后面没有元素,然后访问第二层的94,然后访问原链表,找到72 ,只要访问3个元素即可。
相关推荐
lucene实例lucene实例lucene实例lucene实例lucene实例lucene实例lucene实例lucene实例lucene实例
lucene入门小例子
lucene,lucene教程,lucene讲解。 为了对文档进行索引,Lucene 提供了五个基础的类 public class IndexWriter org.apache.lucene.index.IndexWriter public abstract class Directory org.apache.lucene.store....
lucene3.0 lucene3.0 lucene3.0 lucene3.0 lucene3.0
lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习lucene学习...
Lucene3.0特性Lucene3.0特性
关于搜索的一个小案例,使用的是lucene,框架为ibatis,spring,stuts2
包括认识Lucene、建立索引、为应用程序添加搜索功能、高级搜索技术、扩展搜索、使用Tika提取文本、Lucene的高级扩展、使用其他编程语言访问Lucene、Lucene管理和性能调优等内容,最后还提供了三大经典成功案例,为...
lucene
lucene学习教程lucene讲义 叫你用lucene算法
lucene
lucene3源码分析
比较全面的一个入门 比较全面的一个入门 比较全面的一个入门 比较全面的一lucene个入门 比较全面的一个入门
Annotated Lucene 中文版 Lucene源码剖析
lucene.NET 中文分词 高亮 lucene.NET 中文分词 高亮 lucene.NET 中文分词 高亮 lucene.NET 中文分词 高亮
将源中需要的信息加入Document的各个Field中,并把需要索引的Field索引起来,把需要存储的Field存储起来。 将索引写入存储器,存储器可以是内存或磁盘。 2.2读出流程 用户提供搜索关键词,经过analyzer处理。 对...
程序展现了lucene包强大的建索引和搜索功能!
Lucene 正则表达式 regexQuery
lucene实例lucene实例lucene实例lucene实例lucene实例
lucene 小资源,只是接触lucene的经验积累过程,从中学习一些有意义的经验。