많은 사람들이 가지고 있는 장서들중 하나는 세익스피어전집이다. "Brutus AND Ceasar AND NOT Calpurnia" 라는 단어들을 찾기위해 이들을 포함하는 세익스피어의 작품을 찾는다고 가정해보자. 그중 한가지 방법은 처음부터 끝까지 모든 텍스트들을 읽는것인데 이경우 "Brutus" 와 "Caesar"를 포함하거나 "Calpurnia"를 포함하지 않는지를 고려하지 않고 모든 작품을 읽어야 한다. 문서검색을 하는 심플한 형태는 컴퓨터가 모든 문서를 선형적으로 스캔하게 하는 것이다. 이러한 프로세스는 텍스트를 "grepping"하는 것으로 주로 알려진, Unix 명령어인 grep같은 것이 이것을 수행한다. 문서를 grepping하는 것은 특히 현대컴퓨터들의 빠른 속도하에서 매우 효과적인 프로세스가 될수 있고, "정규표현식"을 사용하는 와이들카드 패턴매칭을 위한 유용한 도구를 제공한다. 현대 컴퓨터에게는 단순한 쿼리들에 대해서는 grep 외에는 필요하지 않을 수 있다.(세익스피어의 전집에서 사용되는 것은 기껏해야 100만단어 미만이다.)
그러나 많은 목적을 위해서는 더 많은 것들이 필요하다:
1.많은 수의 문서콜렉션들을 빨리 처리하기 위해서: 온라인 데이터의 수는 컴퓨터의 속도만큼이나 빨리 증가하고 있고 현재 우리는 수십억에서 수백억의 단어들을 처리해야 한다.
2.좀더 유연한 매칭처리를 허용해야 한다. :예를 들어 "5단어들 이내에" 혹은 "동일 문단에서"라는 조건으로 "Romans NEAR countrymen"이란 쿼리를 grep 처리하는 것은 비현실적이다.
3. 랭킹된 검색을 허용하기 위해서 필요하다.: 많은 경우에 있어 특정단어를 포함하는 수많은 문서들 중에서 좀더 나의 답을 제공하는 결과를 원할수 있다.
미리말하자면 각 쿼리에 대해 문서를 선형적으로 스캐닝하는 것을 피하는 방법은 문서들을 "인덱스"하는 것이다. 세익스피어 전집으로 돌아가서 Boolean 검색모델을 설명해보자. 각 문서들에 대하여 - 여기서는 세익스피어 작품- 세익스피어가 사용한 모든 단어들 가운데(세익스피어는 약 32,000정도의 단어를 사용했다.) 각 문서가 사용했던 안했던 간에 그 문서들을 기록한다고 가정해보자. 도 1.1에서 보듯이 그 결과는 쌍으로 이루어진 term-document "출현 매트릭스"로 된다. 여기서 "term"은 "단어"를 의미하는데 정보검색연구에서는 "term"이란 단어를 주로 선호한다. 이 매트릭스의 행이나 열을 살펴보면 각 텀에 대해 벡터값을 가질수 수있는데 이것은 해당 텀이 나타나는 문서들을 보여주는 것이고, 각 문서에 대한 벡터값을 가질수도 있는데 이것은 해당 문서에서 출현하는 텀들을 보여준다.
"Brutus AND Casesar AND NOT Calpurnia"라는 쿼리에 답하기 위해 Brutus, Caesar와 ㅡCalpurnia에 대한 벡터값들을 취할수 있는데 이때 AND에 대한 비트연산을 수행한다.
110100 AND 110111 AND 101111 = 100100
따라서 이 쿼리에 대한 답은 "Anthony and Cleopatra and Hamlet"이 되게 된다(도1-2)
Boolean 검색모델은 텀에 대한 Boolean으로 표현되는 형식의 쿼리로 언급하면 쉽다. 즉 텀들은 AND, OR, 그리고 NOT 연산으로 조합되어진다. 이러한 쿼리들은 단어의 집합으로서 각 문서들을 바라보게된다.
