Lucene 查询机制 - 哈尔滨工业大学社会计算与信息检索研 ….pptVIP

Lucene 查询机制 - 哈尔滨工业大学社会计算与信息检索研 ….ppt

  1. 1、本文档共17页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Lucene 查询机制 - 哈尔滨工业大学社会计算与信息检索研 ….ppt

Lucene 算法介绍 IR-Lab 胡晓光 Lucene 的主要算法 单个索引的构建 快速排序算法 多个索引的增量归并 增量算法 如何判断当前的索引中是否有需要合并的段 归并算法 如果有,如何合并这些段 查找定位 分级查找机制 二分查找和顺序查找相结合 增量算法 数据结构 栈 主要参数 合并因子 Merge Factor 用于决定合并的频度 增量算法 增量算法 let b=3 be the merge factor; M=∞ for (size = 1; size M; size *= b) { ? if (there are b indexes with size docs on top of the stack) { ?? pop them off the stack; ?? merge them into a single index; ?? push the merged index onto the stack; ?} else { ?? break; ?} } 增量算法 Step1 indexWriter.add(doc1) SegmentInfos(_0,1) maybeMerge = false Step2 indexWriter.add(doc2) SegmentInfos(_0,1;_1,1) maybeMerge = false Step3 indexWriter.add(doc3) SegmentInfos( _0,1;_1,1;_2,1) maybeMerge = true Merge() SegmentInfos(_3,3) Step4 IndexWriter.add(doc4) SegmentInfos(_3,3;_4,1) maybeMerge=false Step5 indexWriter.close() flushRamSegments() SegmentInfos(_5,4) 增量算法 对于N篇文档 N=1M, b=2 gives just 20 indexes 索引中包含的文档数很不均匀,大致等比数列 插入文档的速度较快,查询速度稍慢 归并算法 已知各个段内的Term都是已排序的 用一个小根堆来表示存储各个段 堆中的顺序由段中当前第一个Term决定 取出当前堆中最小的元素写入新的索引段 从最小元素所在的段中删除该元素 重新调整堆 归并算法 例子 为简单起见用一个整数来表示Term 并且不含有相等的整数 Seg1: 1,4,5 Seg2: 2,9,10,12 Seg3: 3,6 Seg4: 7,8 Seg5: 11 合并后结果为:1,2,3,4,5,6,7,8,9,10,11,12 Step1 输入各个段并建立堆 Step2 弹出最小段 把最后一个节点放到根节点 调整成堆 Step3 从Seg1中输出整数1 把Seg1插回到堆的最后 调整成堆 查找算法 查找算法 分级查找 二分查找和顺序查找相结合 查找算法 把.tii文件调入内存 在内存中用二分查找找到相应的Block 把.tis文件中相应的Block调入内存 在Block中顺序找到相应的Term 查找算法 Term在索引里是有序排列的 采用二分查找机制来定位索引里的Term 在Index包TermInfosReader类中的实现代码 private final int getIndexOffset(Term term) throws IOException { int lo = 0; // binary search indexTerms[] int hi = indexTerms.length - 1; while (hi = lo) { int mid = (lo + hi) 1; int delta = pareTo(indexTerms[mid]); if (delta 0)hi = mid - 1; else if (delta 0) lo = mid + 1; else return mid; } return hi; } 小结 快速排序 增量归并算法 二分查找算法 谢谢! * 信息检索实验室 * 信息检索实验室 * * * 信息检索实验室

文档评论(0)

kunpengchaoyue + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档