09.11.2014 Views

Preliminary draft (c) 2007 Cambridge UP - Villanova University

Preliminary draft (c) 2007 Cambridge UP - Villanova University

Preliminary draft (c) 2007 Cambridge UP - Villanova University

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

1.3 Processing Boolean queries 9<br />

Brutus −→ 1 → 2 → 4 → 11 → 31 → 45 → 173 → 174<br />

Calpurnia −→ 2 → 31 → 54 → 101<br />

Merge =⇒ 2 → 31<br />

◮ Figure 1.6 Merging the postings lists for Brutus and Calpurnia from Figure 1.3.<br />

MERGE(p, q)<br />

1 answer ← 〈 〉<br />

2 while p ̸= NIL and q ̸= NIL<br />

3 do if docID[p] = docID[q]<br />

4 then ADD(answer, docID[p])<br />

5 else if docID[p] < docID[q]<br />

6 then p ← next[p]<br />

7 else q ← next[q]<br />

8 return answer<br />

◮ Figure 1.7<br />

Algorithm for the merging (or intersection) of two postings lists.<br />

SIMPLE CONJUNCTIVE<br />

1.3 Processing Boolean queries<br />

How do we process a query in the basic Boolean retrieval model? Consider<br />

processing the simple conjunctive query:<br />

QUERIES<br />

(1.1) Brutus AND Calpurnia<br />

over the inverted index partially shown in Figure 1.3 (page 5). This is fairly<br />

straightforward:<br />

1. Locate Brutus in the Dictionary<br />

2. Retrieve its postings<br />

3. Locate Calpurnia in the Dictionary<br />

4. Retrieve its postings<br />

5. “Merge” the two postings lists, as shown in Figure 1.6.<br />

POSTINGS MERGE<br />

The merging operation is the crucial one: we want to efficiently intersect postings<br />

lists so as to be able to quickly find documents that contain both terms.<br />

There is a simple and effective method of doing a merge whereby we maintain<br />

pointers into both lists and walk through the two postings lists simultaneously,<br />

in time linear in the total number of postings entries, which we<br />

<strong>Preliminary</strong> <strong>draft</strong> (c)<strong>2007</strong> <strong>Cambridge</strong> <strong>UP</strong>

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!