diff options
| author | eltrac <hi@eltr.ac> | 2026-03-31 09:27:35 +0800 |
|---|---|---|
| committer | eltrac <hi@eltr.ac> | 2026-03-31 09:27:35 +0800 |
| commit | 81d9b51756387e5e0cac25367d3a21998d751f5d (patch) | |
| tree | 657e915059f8f0843bd0e298fb28cc1a7235d023 /content/article/search-engine-problem.md | |
| parent | f00a71bdc173ba6556c7b134763dcebf1cf521d8 (diff) | |
docs: update draft
Diffstat (limited to 'content/article/search-engine-problem.md')
| -rw-r--r-- | content/article/search-engine-problem.md | 46 |
1 files changed, 42 insertions, 4 deletions
diff --git a/content/article/search-engine-problem.md b/content/article/search-engine-problem.md index 9ed007a9..cf5331ff 100644 --- a/content/article/search-engine-problem.md +++ b/content/article/search-engine-problem.md @@ -18,7 +18,7 @@ toc = true ## 混沌初开 -世界上第一个搜索引擎出现在万维网诞生之前,甚至最初的类似于搜索系统的想法都和互联网没有关系。1945 年,一个名叫万尼瓦尔·布什的工程师发表了一篇名为《As We May Think》的文章。这篇文章的标题和副标题都很有意思,As We May Think 的意思是「正如我们可能会认为的」,但另一个含义是「正如我们会思考一样」,这篇文章的副标题是:顶尖的美国科学家提出人造机器会开始思考的未来设想。标题的意思是「正如我们会思考一样,人造机器也可能会思考」。 +世界上第一个搜索引擎出现在万维网诞生之前,甚至最初的类似于搜索系统的想法都和互联网没有关系。1945 年,一个名叫万尼瓦尔·布什的工程师发表了一篇名为《As We May Think》[^1]的文章。这篇文章的标题和副标题都很有意思,As We May Think 的意思是「正如我们可能会认为的」,但另一个含义是「正如我们会思考一样」,这篇文章的副标题是:顶尖的美国科学家提出人造机器会开始思考的未来设想。标题的意思是「正如我们会思考一样,人造机器也可能会思考」。 这篇文章的编者注是这样写的: @@ -42,11 +42,49 @@ toc = true 对不熟悉计算机存储的人来说这可能更像生物学分类,但这就是树形结构。虽然我的数据结构学得一般,但我知道 B 树算法就被用在文件系统里。如果没有用到硬链接和软链接,FAT 和 NFTS 等文件系统的原理就和布什描述的十分相似。 -从 memex 的愿景来看,它的确很接近如今的搜索引擎:全人类的信息被索引,放在同一个地方,用很小的设备就能查阅。不过很可惜,memex 只是个假设,我想布什描述的那种机械结构造假应该很高,在他提出这个想法的不久后计算机也问世了。 +从 memex 的愿景来看,它的确很接近如今的搜索引擎:全人类的信息被索引,放在同一个地方,用很小的设备就能查阅。不过很可惜,memex 只是个假设,布什描述的机械结构应该造价很高,在他提出这个想法的不久后计算机也问世了。 -*咦?说好的会思考的机器呢?原来啊,那个时候的新闻报纸也已经学会用标题哗众取宠造势了,和现在的 AI 热潮真是如出一辙啊。* +*咦?说好的会思考的机器呢?原来那个时候的新闻报纸也已经学会用标题哗众取宠造势了,把信息检索称作思考,和把统计规律称作思考,真是难以分清区别呢。* -## +## 万维网问世以前 带着「索引全人类知识」的这个愿景,我们来看看 memex 的后来者,也就是现代搜索引擎,是如何出现的吧。 +WHOIS 和 KIS(Knowbot Information Service)被用于在互联网上搜索用户,前者至今仍在被用于域名信息查询,尽管正在逐步被 RDAP 等新技术代替。如果说搜索用户算不上现代意义上搜索引擎的功能,那么世界上被认可的第一个搜索引擎的名字叫作 Archie。 + +Archie(「档案」一词删去字母 v 得到的词)是第一个用来搜索内容的搜索引擎,不过它使用的是 FTP 协议,也就是文件传输协议。这个软件会用 Telnet 搜索公开的匿名 FTP 服务器。听起来很复古是吗?Archie 对这些 FTP 服务器进行索引的方式是每隔大约一个月请求一次文件列表,下载到本地,处理搜索请求时使用 `grep` 命令查找本地文件。尽管 `grep` 可以做到全文搜索,但 Archie 下载的只是文件标题,所以实际上只能搜索标题。 + +如今人们觉得搜索文件和搜索网页完全不同,但实际上网页就叫作「万维网文档」,是万维网服务器(或者说 Web 服务器)向用户提供的 HTML 格式的文档,所以把 Archie 称作世界上第一个搜索引擎完全不为过。 + +能够搜索文档内容的搜索引擎随着 Gopher 协议的诞生出现了。*不,和 Go 语言没有关系。* Gopher 是服务于互联网的,不再是 FTP 服务器。需要说明的是,Gopher 是一种协议而非具体的软件实现,而且,它和 HTTP(超文本传输协议)是同级的,也就是说它不服务于万维网。它还有 IANA 指定的 TCP 端口号 `70`。 + +") + +搜索时,Gopher 以「制表符分割文本行」的格式返回索引,就像这样: + +``` +1Floodgap Home /home gopher.floodgap.com 70 +``` + +第一个字符是文件类型标识符,第二个是显示名称,第三个看起来很像路径名,实际上叫作选择器(selector),和如今的 URI 是类似的。后面的两个值分别是主机名和端口号。 + +根据文件类型标识符的种类来看,Gopher 支持搜索多种类型的文档:`0` 文本文件,`1` Gopher 子目录,`9` 二进制文件,`I` 图片文件,`d` PDF 和 `.doc` 文件,`s` 音频文件(尤其是 `.wav` 格式),`h` HTML 文件和 `x` XML 文件等。 + +通过索引得到选择器之后,就可以通过选择器拿到想要的文件了。 + +那个时候用得最多的是基于文本的终端而非浏览器。所以,非常常见的做法是用 `curl` 或 `nc`(Netcat)这样的命令行工具直接下载从某个 Gopher 服务器上检索到的文件。 + +比如这样: + +```sh +echo jacks/jack.exe | nc gopher.example.org 70 > jack.exe +``` + +上述命令的作用是:将 `jacks/jack.exe` 这个字符串输入 Netcat,让它用这个字符串搜索 `gopher.exmaple.org` 这个 Gopher 服务器,然后把服务器返回的内容写入本地的 `jack.exe` 文件。 + +*这简直太方便优雅了,这下谁还用浏览器下载文件?*——某个终端狂热爱好者此时已经忘记自己身处 Web 的统治之下。 + +Gopher 本身不是搜索引擎而是搜索协议,它催生了名为 Veronica 和 Jughead 的搜索引擎,这两个搜索引擎会搜索一个或多个 Gopher 服务器来查找内容,形式上已经很接近如今的搜索引擎了。可惜 Gopher 只兴盛了不到 10 年的时间,它和万维网在同时期发展,到了 90 年代末的时候,它就被万维网给取代了。 + +[^1]: 参见:[As We May Think - Wikipedia](https://en.wikipedia.org/wiki/As_We_May_Think) + |
