Luke a Pro

Luke Sun

Developer & Marketer

🇺🇦
EN||

搜尋與檢索:概覽

| , 1 minutes reading.

搜尋與檢索:「不去看」的藝術

巴別圖書館難題

想像妳進入了巴別圖書館,裡面藏著人類歷史上所有的書籍。如果妳想找一個特定的句子,妳有兩個選擇:

  1. 暴力搜尋: 一本一本地讀。在妳讀完第一個書架之前,妳的人生就結束了。
  2. 索引: 查看一份預先做好的目錄,它能準確地告訴妳哪本書、哪一頁包含那個句子。

在軟體工程中,搜尋 幾乎從來不是關於「觀察數據」。它是關於建構結構,讓妳能夠跳過 99.99% 的無效數據。

尋找的進化史

搜尋技術經歷了四個不同的「靈魂」階段:

策略靈魂 / 隱喻代表演算法最佳應用場景
索引 (Indexing)圖書館目錄
在搜尋開始前,將關鍵字映射到位置。
倒排索引全文檢索
(Elasticsearch, Lucene)
前綴 (Prefixing)預判的打字員
透過共同的開頭來鎖定目標。
Trie / 基數樹自動補全 / 路由
(搜尋框、IP 路由)
匹配 (Matching)模式識別專家
在特定的草堆裡尋找特定的針。
KMP / Boyer-Moore日誌分析 / 生物資訊
(Grep, DNA 測序)
語義 (Similarity)讀心者
尋找「意思」相近的東西,哪怕她們長得不一樣。
向量檢索 / LSH推薦系統 / AI
(ChatGPT, 相似圖搜)

搜尋的規模感

妳選擇哪種演算法,完全取決於妳的數據規模對錯誤的容忍度

  • 小規模且精確: 使用哈希表 (Hash Map) 或 前綴樹 (Trie)。
  • 大規模且文本化: 使用倒排索引 (Inverted Index)。
  • 海量且模糊: 使用 LSH 或 向量檢索 (ANN)。

工程思維:預計算即自由

搜尋的第一定律是:搜尋速度是用「寫入階段」的成本換來的。 如果妳想以 O(1)O(1)O(logN)O(\log N) 的速度找到東西,妳就必須在數據到達時,花費 O(N)O(N) 的時間和巨大的磁碟空間去建構索引。搜尋是儲存空間與響應延遲之間最終極的「權衡」。

小結

在本章中,我們將從古老的字串匹配智慧,跨越到未來感十足的向量嵌入世界。我們將明白:找到一根針,靠的不是更好的視力,而是把草堆組織得讓那根針無處遁形。

讓我們從現代網際網路的基石開始:倒排索引