倒排索引优化 - 跳表求交集 空间换时间
索引 优化 时间 空间 交集 跳表 倒排
2023-09-14 09:11:56 时间
lucene中用的是ConjunctionScorer ,大致过程是每条倒排链不断的推进到小于等于当前最大节点的位置。当然实现细节还是很丰富的,作者很细心的把过程都列出来了,建议顺着读一边。这里摘抄部分:
首先把倒排链按第一个next排序:
查看0~7的倒排链的第一个和最后一个是否相同,不同就开始找;取最后一个倒排的第一个元素8作为终点, 第一个链表开始找8
第0个链表 跳过1到了10,那么8也不用找了都去找10就行了
第1根链表找到了11,那么10也不用找了,找11,之后都这么做
......
之后遇到11,本次交集操作找到一个11,
后续的计算也是同理,当然整个代码实现会比较复杂和讨巧。基本思路就是每条倒排链能根据当前文档迅速跳过不符合的docid,由于倒排链可以用skiplist查询,因此即使很长的倒排链,如果交集的数量很少,整个求解过程可以很快跳过不需要比较的节点。
摘自:http://www.itdadao.com/articles/c15a1147107p0.html
相关文章
- MySQL索引优化与分析(重要)
- MySQL索引优化(索引三表优化案例)
- MySQL索引的分类、结构、使用场景
- MySQL数据库学习笔记(六)----MySQL多表查询之外键、表连接、子查询、索引
- 聚集索引和非聚集索引的区别有哪些
- 数据库索引的使用和优化
- java mongodb 基础系列---查询,排序,limit,$in,$or,输出为list,创建索引,$ne 非操作
- mysql 重新整理——索引优化explain字段介绍二 [十]
- mysql 重新整理——索引简介[七]
- mysql 重新整理——索引优化explain字段介绍一 [九]
- 【示例】Lucene查询索引库编程步骤
- MySql中如果某一列中含有NULL,那么包含该列的索引就无效了?
- mysql索引的使用傻瓜教程
- 四叉树空间索引原理及其实现
- Service Team在索引表CRMD_ORDER_INDEX中的存储设计
- Atitit 如何利用先有索引项进行查询性能优化
- 【最全最详细explain讲解】explain | 索引优化的这把绝世好剑,你真的会用吗?
- 【数据库优化】明明加了唯一索引,为什么还是产生重复数据?
- 你真的会使用数据库的索引吗?
- oracle 性能优化--索引总结
- 0x08 MySQL 超详细-索引原理&慢查询优化【转-多图】(重点)
- lucene正向索引(续)——一个文档的所有filed+value都在fdt文件中!!!
- RethinkDB是什么?—— 面向文档的NOSQL数据库,MVCC+Btree索引,pushes JSON to your apps in realtime采用push思路,优化的ssd存储
- logstash 写入数据到elasticsearch 索引相差8小时解决办法