Lucene的倒排索引(学习整理)
2006-09-16 17:32
204 查看
索引结构
Live 1[2],2[1] 2, 5, 2live在文章1中出现了2次,文章2中出现了一次,它的出现位置为“2,5,2”这表示什么呢?我们需要结合文章号和出现频率来分析,文章1中出现了2次,那么“2,5”就表示live在文章1中出现的两个位置,文章2中出现了一次,剩下的“2”就表示live是文章2中第 2个关键字。
索引组织
关键字按字符顺序排列,故可用二元搜索算法快速定位。lucene将上面三列分别作为词典文件(Term Dictionary)、频率文件(frequencies)、位置文件 (positions)保存。其中词典文件不仅保存有每个关键词,还保留了指向频率文件和位置文件的指针,通过指针可以找到该关键字的频率信息和位置信息。
提高查询性能
Lucene中使用了field的概念,用于表达信息所在位置(如标题中,文章中,url中),在建索引中,该field信息也记录在词典文件中,每个关键词都有一个field信息(因为每个关键字一定属于一个或多个field)。为了减小索引文件的大小,Lucene对索引还使用了压缩技术。首先,对词典文件中的关键词进行了压缩,关键词压缩为<前缀长度,后缀>,例如:当前词为“阿拉伯语”,上一个词为“阿拉伯”,那么“阿拉伯语”压缩为<3,语>。其次大量用到的是对数字的压缩,数字只保存与上一个值的差值(这样可以减小数字的长度,进而减少保存该数字需要的字节数)。例如当前文章号是16389(不压缩要用3个字节保存),上一文章号是16382,压缩后保存7(只用一个字节)。
性能分析
假设要查询单词 “live”,lucene先对词典二元查找、找到该词,通过指向频率文件的指针读出所有文章号,然后返回结果。词典通常非常小,因而,整个过程的时间是毫秒级的。而用普通的顺序匹配算法,不建索引,而是对所有文章的内容进行字符串匹配,这个过程将会相当缓慢,当文章数目很大时,时间往往是无法忍受的。
相关文章推荐
- Lucene学习笔记整理
- 整理一点关于Lucene的学习资料, 方便自己与别人查看
- lucene学习资料整理
- JavaEE 学习整理笔记: Servlet 介绍
- Deep Learning(深度学习)学习笔记整理系列之(二)
- oc中易混的方法(仍在学习和整理)
- 17、学习Lucene3.5索引之使用Filter(过滤器)搜索
- 韩顺平_php从入门到精通_视频教程_学习笔记_源代码图解_PPT文档整理_目录
- HttpClient 学习整理
- HTML5学习参考资料整理
- SQL基础学习(必备) (整理)
- VXLAN学习整理
- Lucene学习总结之六:Lucene打分公式的数学推导
- 深度学习笔记 目标函数的总结与整理
- 好学习整理(一)
- Deep Learning(深度学习)学习笔记整理
- Deep Learning(深度学习)学习笔记整理系列之(一)
- Lucene源代码学习之 PackedInts
- sc7731 Android 5.1 Camera 学习之二 framework 到 HAL接口整理
- linux操作系统学习网站整理(100个)