summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--content/article/search-engine-problem.md46
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`。
+
+![](https://r2.eltr.ac/geedeapro/article/search-engine-problem/gopher.png "图源:[Wikimedia](https://commons.wikimedia.org/wiki/File:Gopher_in_Firefox_1.5.png)")
+
+搜索时,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)
+