教材:《信息检索导论》算法
How to build Inverted Index?ui
1. Token sequence.spa
2. Sort by terms..net
3. Dictionary & Postings3d
等高线式前进。orm
O(x+y)blog
O(m*log2n) = m个中的any one都要查看n个中是否也有(二分查找)。索引
O(m+n)ip
借助 min-heap, 找 list 的时间。ci
Update min-heap: O(log2k), k = number of lists.
O(Total_Length * log2k)
- 源于skip pointers, but how to placing skip?
- L1/2
Normally, len(a) < len(b)
O( 2a*log2(b/a) ) [ better than O(a*log2b) 二分查找 ]
Stage1: Σi = 1log2(ni) = log2Πi=1(ni) <= log2(Σ(ni)/a)a (柯西不等式) = log2(b/a)a = a*log2(b/a)
Stage2: 二分查找的cost与Stage1相近(由于都是2的指数级增加)
Ref: 《信息检索导论》第二章总结
排列组合。但总有些组合是没用的,致使False Positive增长。
因此要Filter out.
将两个词当作一个item,即在dictionary中都是两个词为一组。
好比invert and revert,则会变成invert and和and revert;可是这种作法使得倒排记录表迅速变大。
这种方法的缺点不少:
(1)不适用于单词查询。
(2)倒排记录表太大。
(3)查询有时还不正确。须要进行后过滤(即在查询词组中过滤一遍)
(1)对于单个单词出现次数很是多,而组成一个词组后出现次数大大减小的词组,用biword index;
(2)对于那些常常被用户查询的词组,使用biword index;
(3)其他使用positional index【接下来的内容】
支持位置信息查询
对两个单词的位置有要求,好比两个单词必须“相距五个单词之内”。
Figure, 邻近搜索中两个倒排记录表 p1 和 p2 的合并算法,算法寻找两个词项在 k 个词以内出现的情形,
返回一个三元组<文档 ID,词项在 p1中的位置,词项在 p2中的位置>的列表。
Step:
步骤(3)表示,再搜索M上的后面的词的话,这一段就不须要再看了,也就是N链实际上是须要被遍历一遍。
End.