如何制作一个搜索引擎

lau_jia19830629 2017-03-01 01:38:04
我打算写一本介绍搜索引擎制作的书,目前想边写边发,希望大家看了能给点反馈。题目就是“如何制作一个搜索引擎


前言
现在市面上有很多介绍如何制作搜索引擎的书籍,我在书城也曾随手翻过一些,不过大多是书太厚,话太多,有种浪费生命的感觉。回想当年带我入门的那本书是阎宏飞写的《搜索引擎》,靠着这本书,我积累了关于搜索引擎的基础知识,之后再加上老外的论文,最终完成了自己的硕士毕业论文。《搜索引擎》这本书主要阐述了搜索引擎的核心概念和思想,而在具体到实践上则点到即止。我在做网站时积累了一些实践的经验,于是想贡献出一点拙知,希望如果能对有需要的人起到一点帮助的作用,就足够了。
一个搜索引擎能够做到的最基本的事情是接受一个查询输入,然后给出与这个查询输入相关的一些结果。我们常见的搜索引擎百度就是这样一个比较典型的例子。鉴于百度已经占据了国内的绝大部分的搜索份额,于是后来者便另辟蹊径,期望能够在现有的搜索市场中分得一杯羹,创造了垂直搜索的概念。垂直搜索是相对于类似百度或者谷歌这样的通用搜索引擎而提出的。这类搜索引擎往往只针对某一个领域,比如现在国内常见的用来搜索bt和迅雷资源的搜索引擎。不过这类搜索引擎只是限制了通用搜索的查询范围,本质上与那些通用搜索引擎是没有什么差别的,在具体实践上反而要更加简单一些。
我个人喜欢从应用的范围层面来划分,将搜索引擎分为普通互联网搜索引擎和网站站内搜索引擎。互联网搜索引擎需要面对恶劣的数据环境,它从各个不同的网站中搜集网页信息,而这些网站的html代码可能极其不规范,搜索引擎要能够从那些不规范的代码中找出有用的信息。相比互联网搜索引擎,站内搜索引擎要轻松许多,它只处理站内有限的文本信息,而且对于网站建设者而言,可以限制需要被搜索的内容,很多时候,站内搜索引擎根本不需要处理网页代码就能直接获取到信息本身。
在后续一系列围绕如何制作搜索引擎的文章中,我将介绍实现一个通用搜素引擎所需的基础知识,并帮助打造一个简易的互联网搜索引擎和站内搜索引擎。不过在这一切开始之前,读者需懂得基本的编程知识和线性代数知识,否则阎宏飞老师的《搜索引擎》就已经足够了。我会尽量在文章里使用伪代码,尽量少的引用线性代数知识。不过我还是建议读者学习一下c语言和javascript。在具体实践中我们还将涉及nodejs和mongodb,这2个虽然不是编程语言,但是相当有用的中间件工具,有时间的话,也要了解一下。如果你曾学过java,nodejs就相当于weblogic,而mongodb就是oracle数据库了。
...全文
10082 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_50944805 2020-11-24
  • 打赏
  • 举报
回复
楼主你可以看一下阿里的浏览器 《夸克》目前只有手机版。做的非常好。不管是各种设计和ui,搜索非常的智能,而且没有广告。是我用过最好的浏览器。还有很多实用贴心的小功能
5 mins 2020-11-21
  • 打赏
  • 举报
回复
引用 8 楼 麦草CMS 的回复:
我能说,现在搜索引擎已经进入人工智能阶段吗?现在更重要的是如何提供展现,而不是以前的如何分词、如何索引等等,这些技术已经成熟,且趋于稳定。
那您知道现在展现人工智能的方法有哪些吗?小白一枚,需要把人工智能的程序打包进一个网站中使用,但对这方面不是很了解,求教
麦草CMS 2019-06-30
  • 打赏
  • 举报
回复
我能说,现在搜索引擎已经进入人工智能阶段吗?现在更重要的是如何提供展现,而不是以前的如何分词、如何索引等等,这些技术已经成熟,且趋于稳定。
hookee 2019-06-30
  • 打赏
  • 举报
回复
qq_39458162 2017-07-14
  • 打赏
  • 举报
回复
兄弟,更新呀
皮脆肉香酥 2017-06-30
  • 打赏
  • 举报
回复
我说,还会更新吗
weikeni19 2017-03-05
  • 打赏
  • 举报
回复
木击倒啊··································································
lau_jia19830629 2017-03-01
  • 打赏
  • 举报
回复
垂直搜索与站内搜索 与互联网通用搜索引擎相比,所谓的垂直搜索引擎和站内搜索引擎在概念上要简单一些,可以把他们看作是在现有通用搜索引擎的概念上进行裁剪后所形成的产物。垂直搜索是针对某一特定行业领域进行搜索服务。比如提供BT资源搜索的搜索引擎。一般这类搜索引擎会在数据采集端进行简化,只搜取指定网站的网页资源。而在数据加工端,以BT资源搜索引擎为例,引擎只从网页信息中提取出资源名称关键字与bt种子链接地址,并忽略其它信息。在数据索引模块,引擎只做简单的关键字索引,无需对语义等做处理。站内搜索引擎则更加简单一些,引擎在数据采集模块只需被动等待信息输入。这是因为站点的设计是可控的,在任何信息被站点的记录同时传一份副本给搜索引擎,搜索引擎便可执行其后续逻辑流程。搜索论坛帖子便是一个典型案例。当用户提交一个帖子时,站点把提交内容转发给站内搜索引擎,搜索引擎接收帖子文本后,开始数据加工并索引入库。这一切都无需对网页文件进行处理,避免了大量的网页标签过滤工作。 随着越来越多的网页应用使用javascript来动态生成用户内容,传统的互联网通用搜索引擎正在失去其传统优势。在移动优先的设计理念下,传统通用搜索引擎搜集的静态网页有效内容可能只包含一行关键词代码,但网页在用户端却能展现出丰富多彩的内容。所以在不久的将来,站内搜索将发挥越来越大的作用,可能每个公开站点都会有一个自己个性化的搜索引擎,原先由通用搜索引擎提供的站内搜索将逐渐消失。
lau_jia19830629 2017-03-01
  • 打赏
  • 举报
回复
搜索引擎的基本框架
一个完整的网络通用搜索引擎在逻辑上由四部分组成,根据图1,分成数据采集、数据加工、数据索引、数据服务。

图1
数据采集模块俗称网络爬虫或者网络蜘蛛。虽然名字很形象,但是从实践的角度来说,计算机程序的处理过程和昆虫的自发行为有很大的差别。数据采集模块需要能够正确获取到网站的网页,它的行为更像我们在浏览器中输入网址后不断的点击网页链接。所以更为贴切的说法是数据采集模块即模拟了网页浏览器,又模拟了人类的网页点击行为。粗放地来看,数据采集模块应该具有2个基本功能:
1:根据网页地址(URL)获取该地址对应的网页文件。
2:解析出网页文件中的链接地址和网页有效信息文本。
数据加工模块是搜索引擎的核心功能,它负责对数据采集模块采集的网页有效信息文本进行加工,使得我们人类能看懂的文字信息能够按照设定的规则被计算机理解。对于一个初级搜索引擎来说,需要将文本文字进行拆解、归类,如果是中文,还需要在拆解的时候对中文进行分词。之后将解析结果发送给索引模块,索引模块再进一步加工后录入到搜索引擎的数据库中。如果要实现一个更加智能的高级搜索引擎,在上述步骤的基础上,还要能够实现语义理解,这样当用户在搜索“明天星期几”的时候,搜索引擎给出的应该是包含“明天是星期六”或者“明天是星期一”。。。。。。诸如此类的结果,而不仅仅是含有“明天星期几”这5个关键词的网页结果集合。
数据索引模块是搜索引擎的另外一个核心,它和数据加工模块的关系就像人类的心和肺,缺一不可。这个模块主要功能是将数据加工模块的处理结果保存在一个规范的数据结构中,这样做的目的是为了给接下去的数据服务模块提供便利,使得数据服务模块能够在极短的时间内完成对整个互联网数据的信息检索。
数据服务模块是搜索引擎对外部提供服务的接口。它要能够对外部输入进行及时响应,并联系数据索引模块,取出用户查找内容的网页结果。很多时候,为了能够高效地对用户行为进行反馈,搜索引擎常常在这个模块处实现一些预测或者缓存算法,别勉对用户的每一次查询都实施一次完整的数据查找流程。
从上述对4个模块的描述可以看出,搜索引擎和一个图书馆的图书检索系统并没有太大差别,且搜索引擎的模块链都是单向且唯一的,不存在多个模块之间需要进行数据交互,或者数据交互是双向的。仅这一点而言,搜索引擎在逻辑上还是比较简单的。我相信,读者只要能够坚持,最后实现一个实用的搜索引擎应用是完全没有问题的。

2,126

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧