Lucene 基础数据压缩处理

Lucene 为了使的信息的存储占用的空间更小,访问速度更快,采取了一些特殊的技巧,然 而在看 Lucene 文件格式的时候,这些技巧却容易使我们感到困惑,所以有必要把这些特殊 的技巧规则提取出来介绍一下。 在下不才,胡乱给这些规则起了一些名字,是为了方便后面应用这些规则的时候能够简单, 不妥之处请大家谅解。

1. 前缀后缀规则(Prefix+Suffix)

Lucene 在反向索引中,要保存词典(Term Dictionary)的信息,所有的词(Term)在词典中是按照 39

字典顺序进行排列的,然而词典中包 了文档中的几乎所有的词,并且有的词还是非常的长 的,这样索引文件会非常的大,所谓前缀后缀规则,即当某个词和前一个词有共同的前缀的 时候,后面的词仅仅保存前缀在词中的偏移(offset),以及除前缀以外的字符串(称为后缀)。

比如要存储如下词:term,termagancy,termagant,terminal, 如果按照正常方式来存储,需要的空间如下:

[VInt = 4] [t][e][r][m],[VInt = 10][t][e][r][m][a][g][a][n][c][y],[VInt = 9][t][e][r][m][a][g][a][n][t], [VInt = 8][t][e][r][m][i][n][a][l]

共需要 35 个 Byte.

如果应用前缀后缀规则,需要的空间如下:

[VInt = 4] [t][e][r][m],[VInt = 4 (offset)][VInt = 6][a][g][a][n][c][y],[VInt = 8 (offset)][VInt = 1][t],
[VInt = 4(offset)][VInt = 4][i][n][a][l]

共需要 22 个 Byte。
大大缩小了存储空间,尤其是在按字典顺序排序的情况下,前缀的重合率大大提高。 

2. 差值规则(Delta)

在 Lucene 的反向索引中,需要保存很多整型数字的信息,比如文档 ID 号,比如词(Term)在 文档中的位置等等。

由上面介绍,我们知道,整型数字是以 VInt 的格式存储的。随着数值的增大,每个数字占
用的 Byte 的个数也逐渐的增多。所谓差值规则(Delta)就是先后保存两个整数的时候,后面
的整数仅仅保存和前面整数的差即可。

比如要存储如下整数:16386,16387,16388,16389
如果按照正常方式来存储,需要的空间如下:

[(1) 000, 0010][(1) 000, 0000][(0) 000, 0001],[(1) 000, 0011][(1) 000, 0000][(0) 000, 0001],[(1)
000, 0100][(1) 000, 0000][(0) 000, 0001],[(1) 000, 0101][(1) 000, 0000][(0) 000, 0001]

供需 12 个 Byte。

如果应用差值规则来存储,需要的空间如下:

[(1) 000, 0010][(1) 000, 0000][(0) 000, 0001],[(0) 000, 0001],[(0) 000, 0001],[(0) 000, 0001]
共需 6 个 Byte。

大大缩小了存储空间,而且无论是文档 ID,还是词在文档中的位置,都是按从小到大的顺
序,逐渐增大的。

3. 或然跟随规则(A,B?)

时间: 2024-10-15 19:27:33

Lucene 基础数据压缩处理的相关文章

Lucene全文检索之-Lucene基础

Lucene是全文检索引擎 一.在学习Lucene之前我们先思考下,Lucene存在的意义. 1.在之前我们的应用场景中,基于数据库的检索,我们使用like语法进行.但是基于like语法效率低下.达不到我们对应用的使用要求. 而使用Lucene对我们的数据建立索引效率高速度快,满足企业要求. 我们使用Lucene先对整个结构建立索引库,然后根据索引去查找我们需要匹配的内容,效率高速度快,方便我们快速检索信息-这也是Lucene存在的目的. 2.有些查找数据库做不了,比如我们想查找附件中内容的匹配

[全文检索]Lucene基础入门.

本打算直接来学习Solr, 现在先把Lucene的只是捋一遍. 本文内容: 1. 搜索引擎的发展史 2. Lucene入门 3. Lucene的API详解 4. 索引调优 5. Lucene搜索结果排名规则 1 搜索引擎的发展史 1.1 搜索引擎的发展史 萌芽:Archie.Gopher 起步:Robot(网络机器人)和spider(网络爬虫) 1. Robot:网络机器人,自动在网络中运行,完成特定任务的程序,如刷票器.抢票软件等. 2. spider:网络爬虫,是一中特殊的机器人,抓取(下载

Lucene基础(三)-- 中文分词及高亮显示

Lucene分词器及高亮 分词器 在lucene中我们按照分词方式把文档进行索引,不同的分词器索引的效果不太一样,之前的例子使用的都是标准分词器,对于英文的效果很好,但是中文分词效果就不怎么样,他会按照汉字的字直接分词,没有词语的概念. 使用分词的地方只需要把Analyzer实例化成我们第三方的分词器即可 中文分词有很多,这里使用IKAnalyzer 为例, 下载地址 https://git.oschina.net/wltea/IK-Analyzer-2012FF 现在下来后里面有一篇教程. 高

Lucene基础(四)-- 结合数据库使用

需求 很多时候我们在用数据库的需要使用模糊查询,我们一般会使用like语句来做,然而这样的做的效率不是很多(很抱歉我们亲自去测,很多都这么说的),那么使用Lucene来检索的话,效率会高很多. lucene结合数据库步骤 写一段传统的JDBC程序,将每条的用户信息从数据库读取出来 针对每条用户记录,建立一个lucene document Document doc = new Document(); 并根据你的需要,将用户信息的各个字段对应luncene document中的field 进行添加,

Lucene基础(一)--入门

Lucene介绍 lucene的介绍,这里引用百度百科的介绍Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言).Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎.Lucene是一套用于全文检索和搜寻的开源程式库,

Lucene基础(二)--索引的操作

索引的操作 我们建立所有就是要达到快速检索的目的,对数据能够方面便的查找,和数据库类似,索引也有自己的相关增删改查的操作. 在索引的增删改查中,增删改属于写操作,主要是有IndexWrite提供的方法处理:而查显而易见,读操作,使用IndexSeacher 提供的方法来实现.在Lucene的官方文档找到 org.apache.lucene.index.IndexWriter 这个类,我们就可以看到他很多方法. 创建索引 如同上一章里面的代码,创建索引时先建立文件,创建索引的域,再使用IndexW

Lucene 基础类型

Lucene 索引文件中,用一下基本类型来保存信息:1. Byte:是最基本的类型,长 8 位(bit).2. UInt32:由 4 个 Byte 组成.3. UInt64:由 8 个 Byte 组成.4. VInt: " 变长的整数类型,它可能包 多个 Byte,对于每个 Byte 的 8 位,其中后 7 位表示数值,最高 1 位表示是否还有另一个 Byte,0 表示没有,1 表示有. " 越前面的 Byte 表示数值的低位,越后面的 Byte 表示数值的高位. " 例如

lucene基础

Lucene是一个高效的,基于Java的全文检索库. 文档地址:http://lucene.apache.org/core/5_0_0/core/overview-summary.html 我们从下往上看,很容易发现索引(index)是lucene的核心. 那lucene的索引(index)是怎么样的呢? 假设我们有1000份文档分别用编号1-1000表示吧.然后能得到以下结构 左边作为索引而右边作为一个文档链表. 比如第一行代表了lucene单词在2.3.10.35.92文档中  那么luce

lucene总结(一):lucene基础

在一般的结构化数据库中,一般去找一个字段的匹配,使用最多的就是like语句.这种情况下,就像在小时候妈妈给我买的新华字典里去一页页翻出自己的名字一样,效率相对的底下,较为快速的的方式是什么呢?就是通过新华字典的前面的索引来取找,而全文索引就是做的这样的一个工作.为你需要查找的"数据源"做各种的分析索引文件.这里的数据源可以是txt文件,图片文件等结构化的文件.而lucene是全文索引中比较优秀的第三方工具. 下载地址: http://apache.fayea.com/lucene/ja