11# Table of Contents
22
3+ * [ 写在前面] ( #写在前面 )
4+ * [ 搜索引擎发展过程] ( #搜索引擎发展过程 )
5+ * [ 搜索引擎分类] ( #搜索引擎分类 )
6+ * [ 相关实现技术] ( #相关实现技术 )
7+ * [ 自己实现搜索引擎] ( #自己实现搜索引擎 )
8+ * [ 搜索引擎解决方案] ( #搜索引擎解决方案 )
39
410
511本文作者:顿炖
612链接:https://www.zhihu.com/question/19937854/answer/98791215
713来源:知乎
14+ 本系列文章将整理到我在GitHub上的《Java面试指南》仓库,更多精彩内容请到我的仓库里查看
15+ > https://github.com/h2pl/Java-Tutorial
816
9- 写在前面
17+ 喜欢的话麻烦点下Star哈
18+
19+ 本系列文章将整理到我的个人博客
20+ > www.how2playlife.com
21+
22+ 更多Java技术文章会更新在我的微信公众号【Java技术江湖】上,欢迎关注
23+ 该系列博文会介绍常见的后端技术,这对后端工程师来说是一种综合能力,我们会逐步了解搜索技术,云计算相关技术、大数据研发等常见的技术喜提,以便让你更完整地了解后端技术栈的全貌,为后续参与分布式应用的开发和学习做好准备。
24+
25+
26+ 如果对本系列文章有什么建议,或者是有什么疑问的话,也可以关注公众号【Java技术江湖】联系我,欢迎你参与本系列博文的创作和修订。
27+
28+ <!-- more -->
29+ ## 写在前面
1030
1131Max Grigorev最近写了一篇文章,题目是[ 《What every software engineer should know about search》] ( https://link.juejin.im/?target=https%3A%2F%2Fmedium.com%2Fstartup-grind%2Fwhat-every-software-engineer-should-know-about-search-27d1df99f80d ) ,这篇文章里指出了现在一些软件工程师的问题,他们认为开发一个搜索引擎功能就是搭建一个ElasticSearch集群,而没有深究背后的技术,以及技术发展趋势。Max认为,除了搜索引擎自身的搜索问题解决、人类使用方式等之外,也需要解决索引、分词、权限控制、国际化等等的技术点,看了他的文章,勾起了我多年前的想法。
1232
1333很多年前,我曾经想过自己实现一个搜索引擎,作为自己的研究生论文课题,后来琢磨半天没有想出新的技术突破点(相较于已发表的文章),所以切换到了大数据相关的技术点。当时没有写出来,心中有点小遗憾,毕竟凭借搜索引擎崛起的谷歌是我内心渴望的公司。今天我就想结合自己的一些积累,聊聊作为一名软件工程师,您需要了解的搜索引擎知识。
1434
15- 搜索引擎发展过程
35+ ## 搜索引擎发展过程
1636
1737现代意义上的搜索引擎的祖先,是1990年由蒙特利尔大学学生Alan Emtage发明的Archie。即便没有英特网,网络中文件传输还是相当频繁的,而且由于大量的文件散布在各个分散的FTP主机中,查询起来非常不便,因此Alan Emtage想到了开发一个可以以文件名查找文件的系统,于是便有了Archie。Archie工作原理与现在的搜索引擎已经很接近,它依靠脚本程序自动搜索网上的文件,然后对有关信息进行索引,供使用者以一定的表达式查询。
1838
1939互联网兴起后,需要能够监控的工具。世界上第一个用于监测互联网发展规模的“机器人”程序是Matthew Gray开发的World wide Web Wanderer,刚开始它只用来统计互联网上的服务器数量,后来则发展为能够检索网站域名。
2040
2141随着互联网的迅速发展,每天都会新增大量的网站、网页,检索所有新出现的网页变得越来越困难,因此,在Matthew Gray的Wanderer基础上,一些编程者将传统的“蜘蛛”程序工作原理作了些改进。现代搜索引擎都是以此为基础发展的。
2242
23- 搜索引擎分类
43+ ## 搜索引擎分类
2444
2545* 全文搜索引擎
2646
@@ -34,7 +54,7 @@ Max Grigorev最近写了一篇文章,题目是[《What every software engineer
3454
3555 元搜索引擎在接受用户查询请求时,同时在其他多个引擎上进行搜索,并将结果返回给用户。著名的元搜索引擎有InfoSpace、Dogpile、Vivisimo等,中文元搜索引擎中具代表性的有搜星搜索引擎。在搜索结果排列方面,有的直接按来源引擎排列搜索结果,如Dogpile,有的则按自定的规则将结果重新排列组合,如Vivisimo。
3656
37- 相关实现技术
57+ ## 相关实现技术
3858
3959搜索引擎产品虽然一般都只有一个输入框,但是对于所提供的服务,背后有很多不同业务引擎支撑,每个业务引擎又有很多不同的策略,每个策略又有很多模块协同处理,及其复杂。
4060
@@ -115,15 +135,15 @@ Cloudera是一家将Hadoop技术用于搜索引擎的公司,用户可以采用
115135
116136国际化、个性化搜索、匿名搜索,这些都是Google这样的产品所不能完全覆盖到的,事实上,也没有任何一款产品可以适用于所有需求。
117137
118- 自己实现搜索引擎
138+ ## 自己实现搜索引擎
119139
120140如果我们想要实现搜索引擎,最重要的是索引模块和搜索模块。索引模块在不同的机器上各自进行对资源的索引,并把索引文件统一传输到同一个地方(可以是在远程服务器上,也可以是在本地)。搜索模块则利用这些从多个索引模块收集到的数据完成用户的搜索请求。因此,我们可以理解两个模块之间相对是独立的,它们之间的关联不是通过代码,而是通过索引和元数据,如下图所示。
121141
122142![ ] ( https://ww1.sinaimg.cn/large/006tKfTcly1fkrzshq4cbj30ga05874m.jpg )
123143
124144对于索引的建立,我们需要注意性能问题。当需要进行索引的资源数目不多时,隔一定的时间进行一次完全索引,不会占用很长时间。但在大型应用中,资源的容量是巨大的,如果每次都进行完整的索引,耗费的时间会很惊人。我们可以通过跳过已经索引的资源内容,删除已不存在的资源内容的索引,并进行增量索引来解决这个问题。这可能会涉及文件校验和索引删除等。另一方面,框架可以提供查询缓存功能,提高查询效率。框架可以在内存中建立一级缓存,并使用如 OSCache或 EHCache缓存框架,实现磁盘上的二级缓存。当索引的内容变化不频繁时,使用查询缓存更会明显地提高查询速度、降低资源消耗。
125145
126- 搜索引擎解决方案
146+ ## 搜索引擎解决方案
127147
128148* Sphinx
129149
0 commit comments