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