互聯(lián)網(wǎng)搜索引擎的索引和一本書的索引有著相同的工作原理。書“頁(yè)”現(xiàn)在成了萬(wàn)維網(wǎng)上的網(wǎng)頁(yè),而搜索引擎則給互聯(lián)網(wǎng)上的每個(gè)網(wǎng)頁(yè)分配了一個(gè)不同的頁(yè)碼。(是的,互聯(lián)網(wǎng)上雖然有很多網(wǎng)頁(yè)——最新的數(shù)據(jù)顯示有成百上千億個(gè)——但計(jì)算機(jī)很擅長(zhǎng)處理大數(shù)字。)上圖給出了一個(gè)會(huì)讓整個(gè)過(guò)程更具體的例子。想象萬(wàn)維網(wǎng)只由上面顯示的3個(gè)短網(wǎng)頁(yè)組成,它們分別分配到了頁(yè)碼1、2和3。
計(jì)算機(jī)可以為這三個(gè)網(wǎng)頁(yè)創(chuàng)建一個(gè)索引:首先要為出現(xiàn)在任一頁(yè)面上的所有單詞創(chuàng)建一個(gè)列表,然后按字母表順序整理這張列表。我們可以將結(jié)果稱為單詞表(word list)——在這個(gè)例子中是“a、cat、dog、mat、on、sat、stood、the、while”。然后計(jì)算機(jī)會(huì)一個(gè)單詞一個(gè)單詞地搜遍所有頁(yè)面。計(jì)算機(jī)會(huì)標(biāo)注每個(gè)單詞所在的頁(yè)碼,然后再標(biāo)注單詞表中下一個(gè)單詞的位置。最終結(jié)果顯示在上圖中。比如,你可以立即看到單詞“cat”出現(xiàn)在第1頁(yè)和第3頁(yè),卻不在第2頁(yè)。而單詞“while”只出現(xiàn)在第3頁(yè)。
通過(guò)這種簡(jiǎn)單方法,搜索引擎就已經(jīng)能回答許多簡(jiǎn)單的查詢。比如,假設(shè)你輸入查詢?cè)~“cat”,搜索引擎能很快跳轉(zhuǎn)到單詞表中的“cat”項(xiàng)。(因?yàn)樽帜副硎前醋帜概判虻?,?jì)算機(jī)能很快找到任何項(xiàng),就像我們可以很快找到詞典中的一個(gè)單詞一樣。)一旦計(jì)算機(jī)找到“cat”項(xiàng),搜索引擎就能給出該項(xiàng)的頁(yè)面列表——在這個(gè)例子中就是第1頁(yè)和第3頁(yè)?,F(xiàn)代搜索引擎對(duì)結(jié)果的組織很合理,只摘取了返回頁(yè)面的少許片段,不過(guò),我們基本上會(huì)忽略這樣的細(xì)節(jié),將精力集中在搜索引擎如何知道頁(yè)面“符合”用戶輸入的查詢上。
再舉另一個(gè)非常簡(jiǎn)單的例子,讓我們來(lái)檢查一下查詢“dog”的步驟。在這個(gè)例子中,搜索引擎很快會(huì)找到“dog”項(xiàng),并返回頁(yè)碼2和3。如果查詢多個(gè)單詞,如“cat dog”呢?這表示你正在尋找同時(shí)包含單詞“cat”和“dog”的頁(yè)面。通過(guò)已有的索引,搜索引擎也能很容易查到結(jié)果。搜索引擎首先會(huì)單獨(dú)查找這兩個(gè)單詞,找出它們分別在哪些頁(yè)面中。結(jié)果是“cat”在第1頁(yè)和第3頁(yè),“dog”在第2頁(yè)和第3頁(yè)。之后,計(jì)算機(jī)能快速掃描這兩個(gè)命中列表,尋找同時(shí)出現(xiàn)在兩個(gè)列表中的頁(yè)碼。在這個(gè)例子中,第1頁(yè)和第2頁(yè)被排除了,但第3頁(yè)同時(shí)出現(xiàn)在兩個(gè)列表中,因此最終答案就是第3頁(yè)上的一次單獨(dú)命中。與之極其相似的一個(gè)策略也適用于超過(guò)兩個(gè)單詞的查詢。比如,查詢“cat the sat”會(huì)返回第1頁(yè)和第3頁(yè)為命中,因?yàn)樗鼈兪恰癱at”(1,3)、“the”(1,2,3)和“sat”(1,3)這個(gè)列表的通用元素。
就目前來(lái)看,搭建一個(gè)搜索引擎聽起來(lái)相當(dāng)容易。最簡(jiǎn)單的索引技術(shù)似乎運(yùn)行得很好,即便對(duì)多詞查詢也是如此。不幸的是,這種簡(jiǎn)單方法完全不能滿足現(xiàn)代搜索引擎的需要。出現(xiàn)這種情況的原因有幾個(gè),不過(guò)現(xiàn)在我們只會(huì)關(guān)注其中之一:如何做短語(yǔ)查詢。短語(yǔ)查詢是指尋找一個(gè)確切短語(yǔ)的查詢,而非湊巧一些單詞出現(xiàn)在頁(yè)面中的某些地方。比如,“cat sat”查詢和cat sat查詢的意義截然不同。cat sat查詢尋找的是在任何位置包含“cat”和“sat”兩個(gè)單詞的頁(yè)面,不考慮順序;而“cat sat”查詢尋找的是包含單詞“cat”之后緊跟單詞“sat”的頁(yè)面。在上面那個(gè)由三個(gè)網(wǎng)頁(yè)組成的簡(jiǎn)單例子中,cat sat查詢結(jié)果命中第1頁(yè)和第3頁(yè),但“cat sat”查詢只返回一次命中,就在第1頁(yè)。