Lucene (v4.5) 深入学习(一) —— 原理
来源:互联网 发布:阴茎粗大的感受 知乎 编辑:程序博客网 时间:2024/06/03 20:31
Lucene(v4.5) 深入学习(一)
原理
花了两三天把《Lucene原理与代码分析》的主要内容看了遍,之后开始看官网上的文档。《Lucene原理与代码分析》的作者分析的对象是Lucene2.9,我分析的对象是Lucene4.5,而Lucene当前的最新版本为4.7。4.x版本和2.x版区别非常大(4.5和4.7的区别也不小,汗),最终能借鉴《Lucene原理与代码分析》的东西十分有限,但《原理》对我来说确实起到了很好的指导作用。
本系列的细节内容依据官网文档和源码,小部分说明图截自《原理》。另外,如有需要会说明4.5和4.7的区别。
Lucene简介
定义
Apache Lucene是一个高性能(high-performance)的全能的全文检索(full-featured text search engine)的搜索引擎框架库,完全(entirely)使用Java开发。它是一种技术(technology),适合于(suitable for)几乎(nearly)任何一种需要全文检索(full-text search)的应用,特别是跨平台(cross-platform)的应用。
建索引,搜索流程与Lucene各模块的对应关系
1.Lucene的analysis 模块主要负责词法分析及语言处理而形成Term。
2.Lucene的index模块主要负责索引的创建,里面有IndexWriter。
3.Lucene的store模块主要负责索引的读写。
4.Lucene的QueryParser主要负责语法分析。
5.Lucene的search模块主要负责对索引的搜索。
6.Lucene的similarity模块主要负责对相关性打分的实现。
Lucene的文件格式
基本数据类型
1.Byte:是最基本的类型,长8位(bit)。
2.UInt32:由4 个Byte 组成。
3.UInt64:由8 个Byte 组成。
4.VInt:变长的整数类型
5.Chars:是UTF-8 编码的一系列Byte。
6.String:一个字符串首先是一个VInt 来表示此字符串包含的字符的个数,接着便是UTF-8编码的字符序列Chars。
下图是VInt类型的例子,每个Byte中的第一位用于标记后面紧跟的Byte是不是属于同一个数字。其中1表示属于。
索引使用的数据压缩方法
主要有四种方法,这些方法在搜索引擎中都属于常见技术。这里的名称参考《Lucene原理与代码分析》。
前缀+后缀
主要用于term字符串的压缩。
差值
用于压缩文档号之类的东西。
或然跟随规则
图是从《Lucene原理与代码分析》来的,不过作者的解释把问题复杂化了,还是官方文档的说明清楚明了。
官方文档直接举了个例子,例子是这样的:
一个term在文档7中出现一次,在文档11中出现3次,如何记录这些信息?如果单纯利用差值规则记录文档,应为7,4。为了节约空间,如果term只出现一次就直接依附于前面的文档编号记录,方法是使文档编号左移一位(7×2=14),并在末位置1(14+1=15)。如果出现不止一次,那么就使用另一种方法:对于文档11,同样使文档编号左移一位(4×2=8),后面的一个记录单元记录次数3。于是最后形成的文件中的记录为15, 8, 3。所以如果代表文档的数字是偶数,那么意味着后面跟着的记录单元里存放的是次数。
跳跃表
常见数据结构。
More from site: http://www.abyssss.com/?p=232
- Lucene (v4.5) 深入学习(一) —— 原理
- Lucene深入学习(5)Lucene的Document与Field
- Lucene深入学习(5)Lucene的IndexWriter
- Lucene 深入学习(2)Lucene简介
- Lucene学习笔记——深入剖析Analyzer(1)
- lucene学习(一)
- Lucene学习(一)
- Lucene学习(一)
- Lucene学习笔记(一)-------Lucene基础
- [资料整理]四种代理服务器的原理(一)——SOCKS v4/v4a代理服务器的原理
- [资料整理]四种代理服务器的原理(一)——SOCKS v4/v4a代理服务器的原理
- Lucene 深入学习(3)Lucene索引初识
- Lucene 深入学习(4)Lucene索引实现方式
- Lucene深入学习(7)Lucene的索引过程
- Lucene深入学习(8)Lucene的索引文件
- Lucene学习——IKAnalyzer中文分词(一)
- lucene学习笔记(一)——索引的建立
- Lucene学习笔记(一)
- 多进程编程学习笔记-1-进程基础
- 网络层---计算机网络
- day16集合
- 设计模式之13--模板模式
- JS中Array方法中常用方法四:Array.prototype.pop()
- Lucene (v4.5) 深入学习(一) —— 原理
- IOS NSKeyedArchiver 归档,和解档
- 跳过编译安装 - centos安装编译nodejs - 不要跳坑了,直接下载编译好的版本
- 2016-9-10比赛总结
- Change项目总结
- poj3436 ACM Computer Factory
- 压轴题1
- 开始写博客
- 带你读开源—ASP.NET_MVC(十一)