不論是百度(Baidu)、微軟 Bing,還是早期的奇摩(Yahoo!)與新浪(Sina),這些大型搜尋引擎在處理海量網頁資料時,底層的架構與核心邏輯其實大同小異。
它們同樣需要解決「海量儲存」與「毫秒級檢索」的矛盾,其解決方案可以拆解為壓縮儲存與免解壓快速檢索兩個維度。
一、 這些搜尋引擎如何將網頁資料壓縮?
搜尋引擎在爬取網頁後,會把網頁拆成兩部分儲存:網頁快照(原始 HTML) 與 索引資料(關鍵字清單)。
1. 網頁快照的通用壓縮(以百度、微軟為例)
- 微軟 Bing:大量使用與開發高效能的壓縮演算法(如基於 LZ77 改進的演算法)。
- 百度:針對中文網頁,百度擁有龐大的「中文動態字典」。在儲存網頁快照時,它不會重複儲存「的」、「是什麼」、「可以」等高頻詞,而是用極短的字典代碼(類似霍夫曼編碼的邏輯)來替換。
- 通用標準:現代搜尋引擎普遍採用 Zstandard (Zstd) 或 Brotli。這些演算法可以在極快的速度下,將網頁的 HTML/CSS 壓縮到原本的 20% 以下。
2. 索引資料的壓縮:倒排索引 (Inverted Index)
這是所有搜尋引擎的通用核心。假設有 10 億個網頁包含「紫微斗數」這個詞,搜尋引擎不會在每個網頁後面寫一次這個詞,而是建立一個清單:
關鍵字「紫微」➡ [網頁ID: 4, 網頁ID: 9, 網頁ID: 15, ..., 網頁ID: 20000030]
這串網頁 ID 清單(稱為 Posting List)非常龐大,為了壓縮它,各大搜尋引擎會使用:
- 差值編碼 (Delta Encoding):不存原始 ID,只存與前一個數字的差。原本的 [4, 9, 15] 變成 [4, 5, 6]。數字變小後,佔用的位元(Bit)大幅減少。
- VByte (Variable Byte) 編碼:讓小的數字(如 5)只佔用 1 個位元組,大的數字才佔用更多,精準省下空間。
二、 如何在被壓縮的資料中「快速找尋關鍵字」?
如果每次使用者輸入關鍵字,搜尋引擎都要把幾百 TB 的壓縮檔「解壓縮」再尋找,伺服器絕對會當機。各大搜尋引擎的核心機密,就在於「如何在不完全解壓縮的情況下完成搜尋」。
1. 跳表(Skip List)與區塊壓縮(Block-level Compression)
搜尋引擎會把幾百萬個網頁 ID 的清單,切成無數個「小區塊」(例如每 128 個 ID 一組),並單獨壓縮。
在這些區塊之上,會建立一個類似火車時刻表的跳表(Skip List)。
- 尋找流程:當你在百度搜尋「紫微」,系統會先看跳表。跳表會告訴系統:「網頁 ID 5000 到 10000 的資料在第 45 號區塊」。
- 系統會直接跳過前 44 個區塊(完全不解壓縮),只針對第 45 號區塊進行極小規模的解壓縮。
2. PFOR-Delta 與 SIMD 硬體加速(微軟與百度的強項)
為了追求極致速度,微軟 Bing 和百度廣泛採用了 PFOR-Delta (Patched Frame-of-Reference) 演算法與 CPU 的 SIMD(單指令流多資料流) 技術。
- 這項技術允許 CPU 直接在壓縮狀態下,一次性對一整組網頁 ID 進行數學比對(如大於、小於、等於)。
- 這種「硬體級」的並行處理,讓搜尋引擎能在幾微秒內過濾掉數百萬筆壓縮數據。
3. 布隆過濾器(Bloom Filter)的快速排查
在進入硬體搜尋前,新浪、奇摩等系統常使用布隆過濾器。它是一個極小的二進位矩陣(全部由 0 與 1 組成):
- 使用者輸入關鍵字時,系統先用布隆過濾器快速勾稽。
- 如果過濾器回傳 0,代表這整批伺服器的壓縮硬碟裡絕對沒有這個網頁,直接不讀取硬碟,省下極大的 I/O 負擔。
三、 各家搜尋引擎的側重點差異
雖然原理相通,但在實作上因為時代與技術背景而有所不同:
- 微軟 Bing:極度依賴其強大的亞洲研究院(MSRA)技術,在硬體加速(如使用 FPGA 晶片、SIMD 指令集)與分散式架構(布署在 Azure 雲端)上做得非常激進,能夠在半壓縮狀態下進行極複雜的語意關聯搜尋。
- 百度:作為中文搜尋龍頭,它的核心優勢在於「中文分詞與壓縮字典」。中文不像英文有空格,百度必須先把「紫微斗數命盤」切成「紫微/斗數/命盤」,再將這些詞彙對應到其高度壓縮的專利索引結構中。
- 早期奇摩/新浪:在自主研發能力較弱的早期,多依賴開源的搜尋引擎架構(如基於 Java 的 Lucene/Solr 或 Elasticsearch)。這些開源工具底層同樣使用了上述的倒排索引與 FST(Finite State Transducer)壓縮技術。
⚠️ 重要提醒
商業機密限制:上述分析基於公開論文、技術部落格與開源實踐推導,非各公司官方架構說明。
總結
不管是哪一家搜尋引擎,核心心法都是:「大化小、分區塊、建跳表、靠硬體」。
它們將資料切得足夠碎並做好索引摘要,搜尋時就像查字典一樣,直接翻到特定的那一頁(區塊)去解壓縮,而其他 99.9% 的壓縮資料在整個搜尋過程中,連碰都不會被碰到。























