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