分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 教程案例

Lucene 基础数据压缩处理

发布时间:2023-09-06 01:07责任编辑:沈小雨关键词:暂无标签

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?) 

Lucene 基础数据压缩处理

原文地址:http://www.cnblogs.com/wangmh/p/7516368.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved