我知道自己在這點上談得很多,但巨細(xì)無遺、從頭至尾地研究這個例子,是為了讓讀者真正地理解為了獲得答案究竟使用了哪些信息。注意,我們已經(jīng)為短語“cat sat”找到了一次命中,僅僅是通過查看索引信息(“cat”的位置1-2、3-2,“sat”的位置1-3、3-7),而非原始網(wǎng)頁。這很關(guān)鍵,因為我們只需查看索引中的兩個項,而非遍歷所有可能包含命中的頁面——而在進(jìn)行真正短語查詢的真正的搜索引擎中,可能有數(shù)百萬個這樣的頁面??傊和ㄟ^在索引中加入頁內(nèi)詞位置,我們只需通過查看索引中的幾行,就能找到一次短語查詢命中,而非遍歷海量頁面。這個簡單的詞位置把戲是讓搜索引擎奏效的關(guān)鍵之一。
事實上,我還沒講完“cat sat”這個例子。我們完成了對第1頁信息的處理,但第3頁還沒處理。對第3頁的推理和第1頁的處理方式很相似:“cat”出現(xiàn)在第3頁的位置2,“sat”出現(xiàn)在位置7,因此它們不可能相鄰——因為緊跟2之后出現(xiàn)的不是7。這樣我們就知道,第3頁并不是短語查詢“cat sat”的命中,盡管它是多詞查詢cat sat的命中。
順便說一下,詞位置把戲不僅僅對短語查詢重要。舉個例子,思考一下尋找相鄰單詞的問題。在一些搜索引擎中,用戶可以在查詢中使用“NEAR”關(guān)鍵詞做到這一點。事實上,AltaVista搜索引擎在早期就提供了這一功能,在本書寫作時仍然提供。作為一個特殊的例子,假設(shè)在一些特別的搜索引擎中,查詢cat NEAR dog 會找到“dog”前后五個位置之內(nèi)出現(xiàn)“cat”的頁面。我們?nèi)绾尾拍茉跀?shù)據(jù)集中有效地執(zhí)行這種查詢?使用詞位置,會使查詢變得很容易。“cat”的索引項是1-2、3-2,而“dog”的索引項是2-2、3-6??梢粤⒖炭闯?,第3頁是唯一可能的命中。而在第3頁,“cat”出現(xiàn)在位置2,“dog”出現(xiàn)在位置6。因此這兩個詞之間的距離是6-2,結(jié)果是4。因此,“cat”的確出現(xiàn)在“dog”前后五個位置之內(nèi),而第3頁則是查詢cat NEAR dog的命中。和前面一樣,請注意這次查詢的執(zhí)行是多么高效:無須遍歷任何網(wǎng)頁的實際內(nèi)容——相反,只參考了索引中的兩個項。
不過,在實際中,NEAR查詢對搜索引擎用戶并不非常重要。幾乎沒人使用NEAR查詢,絕大多數(shù)主要搜索引擎甚至不支持它們。盡管如此,能執(zhí)行NEAR查詢的能力實際上對現(xiàn)實中的搜索引擎至關(guān)重要。這是因為搜索引擎不斷地在后臺執(zhí)行NEAR查詢。要理解其中的原因,我們首先不得不研究現(xiàn)代搜索引擎面臨的主要問題之一:排名的問題。