Boolean検索
Boolean検索では、Boolean演算子(and,or,not)を用いてクエリを作成する。
例えば、
CAESAR AND BRUTUS
というクエリを投げると、CAESARとBRUTUSというタームを共に含むドキュメントをサーチする。
出現:1 非出現:0
例えば、CALPURNIAというドキュメントには、Julius Caesar というタームが含まれている。
この行ベクトルを用いて、Boolean演算を実行する。
例えば、
BRUTUS AND CAESAR AND NOT CALPURNIA
というクエリなら、
110100 AND 110111 AND 101111 = 100100
というように実行できる。
ただし!
ドキュメントセットが大きい場合、非常に大きな行列になるので、メモリにのらない。
しかし行列の要素はほとんど0なので、1だけを記録するインデックスにしよう。
これがいわゆる転置インデックス(Invarted Index)である。
例えばBrutusというタームは、ドキュメント1,2,4,…に出現する。
これらをインターセクションすることで、Boolean演算が実行可能である。
ちなみに、リストの短いものから順に演算していくと効率がよい。(この場合だとCALPURNIA,BRUTUS,CAESARの順)
メリット
- 正確である。
デメリット
- 逐次検索であるため、大量にドキュメントセットがある場合は非常に遅い
- 例えば「COUNTRYMANの近くにROMANSがあるような文書」のようなクエリは作成できない