[IR] Boolean retrieval

时间:2024-12-17 11:32:50

How to build Inverted Index?

  1. Token sequence.

  2. Sort by terms.

  3. Dictionary & Postings

code


【Qword1 and Qword2】

  等高线式前进。

  O(x+y)

[IR] Boolean retrieval


【Qword1 and not Qword2】

O(m*log2n) = m个中的any one都要查看n个中是否也有(二分查找)。

【Qword1 or not Qword2】

O(m+n)


【Qword1 and Qword2 and Qword3 and ...】

借助min-heap.

Update min-heap: O(log2k), k = number of lists.

O(Total_Length * log2k)


【Qword1 and Qword2】- 改进: Galloping Search

- 源于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)(柯西不等式) = log2(b/a)a = a*log2(b/a)

Stage2: 二分查找的cost与Stage1相近(因为都是2的指数级增长)

[IR] Boolean retrieval

code


Pharse Queries

1. Biword Indexes

排列组合。但总有些组合是没用的,导致False Positive增加。

所以要Filter out.

2. Positional Index --> Proximity Queries

支持位置信息查询

[IR] Boolean retrieval

k词邻近搜索

[IR] Boolean retrieval

[IR] Boolean retrieval

Figure, 邻近搜索中两个倒排记录表 p1 和 p2 的合并算法,算法寻找两个词项在 k 个词之内出现的情形,

返回一个三元组<文档 ID,词项在 p1中的位置,词项在 p2中的位置>的列表。

Step:

[IR] Boolean retrieval