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) 的时间和巨大的磁盘空间去构建索引。搜索是存储空间与响应延迟之间最终極的“权衡”。

小结

在本章中,我们将从古老的字符串匹配智慧,跨越到未来感十足的向量嵌入世界。我们将明白:找到一根针,靠的不是更好的视力,而是把草堆组织得让那根针无处遁形。

让我们从现代互联网的基石开始:倒排索引