倒排索引原理?
倒排索引就是通过值去找文件
term dictionary:如果后面的 term 比较多,例如 18 岁的有好几万人。需要提高查询效率,因此产生了 term dictionary,就是吧所有的 term 做一下排序,然后使用二分查找,logN次 访问磁盘
term index:每次访问磁盘太慢了,需要放到内存里,可以整个 term dictionary 太大了,只能放一部分。所以出现了这个 Term Index,它其实是一个 Trie 树。
最后得到下面的这样一个东西,先查 term index,然后 term dictionary,然后二分查找元素
如何联合索引查询?
- 使用skip list数据结构。同时遍历gender和age的posting list,互相skip;
- 使用bitset数据结构,对gender和age两个filter分别求出bitset,对两个bitset做AND操作。
什么是跳表(skip list)深夜学算法之SkipList:让链表飞
bitset 就是给所有的文件做一个 bit 表,然后按位与。