如何制作一个搜索引擎

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


前言
现在市面上有很多介绍如何制作搜索引擎的书籍,我在书城也曾随手翻过一些,不过大多是书太厚,话太多,有种浪费生命的感觉。回想当年带我入门的那本书是阎宏飞写的《搜索引擎》,靠着这本书,我积累了关于搜索引擎的基础知识,之后再加上老外的论文,最终完成了自己的硕士毕业论文。《搜索引擎》这本书主要阐述了搜索引擎的核心概念和思想,而在具体到实践上则点到即止。我在做网站时积累了一些实践的经验,于是想贡献出一点拙知,希望如果能对有需要的人起到一点帮助的作用,就足够了。
一个搜索引擎能够做到的最基本的事情是接受一个查询输入,然后给出与这个查询输入相关的一些结果。我们常见的搜索引擎百度就是这样一个比较典型的例子。鉴于百度已经占据了国内的绝大部分的搜索份额,于是后来者便另辟蹊径,期望能够在现有的搜索市场中分得一杯羹,创造了垂直搜索的概念。垂直搜索是相对于类似百度或者谷歌这样的通用搜索引擎而提出的。这类搜索引擎往往只针对某一个领域,比如现在国内常见的用来搜索bt和迅雷资源的搜索引擎。不过这类搜索引擎只是限制了通用搜索的查询范围,本质上与那些通用搜索引擎是没有什么差别的,在具体实践上反而要更加简单一些。
我个人喜欢从应用的范围层面来划分,将搜索引擎分为普通互联网搜索引擎和网站站内搜索引擎。互联网搜索引擎需要面对恶劣的数据环境,它从各个不同的网站中搜集网页信息,而这些网站的html代码可能极其不规范,搜索引擎要能够从那些不规范的代码中找出有用的信息。相比互联网搜索引擎,站内搜索引擎要轻松许多,它只处理站内有限的文本信息,而且对于网站建设者而言,可以限制需要被搜索的内容,很多时候,站内搜索引擎根本不需要处理网页代码就能直接获取到信息本身。
在后续一系列围绕如何制作搜索引擎的文章中,我将介绍实现一个通用搜素引擎所需的基础知识,并帮助打造一个简易的互联网搜索引擎和站内搜索引擎。不过在这一切开始之前,读者需懂得基本的编程知识和线性代数知识,否则阎宏飞老师的《搜索引擎》就已经足够了。我会尽量在文章里使用伪代码,尽量少的引用线性代数知识。不过我还是建议读者学习一下c语言和javascript。在具体实践中我们还将涉及nodejs和mongodb,这2个虽然不是编程语言,但是相当有用的中间件工具,有时间的话,也要了解一下。如果你曾学过java,nodejs就相当于weblogic,而mongodb就是oracle数据库了。
...全文
10092 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个模块的描述可以看出,搜索引擎和一个图书馆的图书检索系统并没有太大差别,且搜索引擎的模块链都是单向且唯一的,不存在多个模块之间需要进行数据交互,或者数据交互是双向的。仅这一点而言,搜索引擎在逻辑上还是比较简单的。我相信,读者只要能够坚持,最后实现一个实用的搜索引擎应用是完全没有问题的。
简介: 1、多级目录,每个目录下面可以有更深一级目录,并列出属于该目录的网站 管理:选择分类管理,添加需要的分类,或者选择下一级目录,同时可以选择删除(删)修改(修)制作(制)某一个目录 2、静态页面,所有目录页面均使用程序生成了html页,不用读取数据库,大大节省了服务器资源 管理:选择制作下属页面,系统会列出搜索的类别,请选择需要生成的类别 3、目录模版,在数据库中存放了大量的页面模版,每一个目录都可以订制自己的网面 管理:选择模板管理,系统会列出目前已经存在的模板,你可以修改,添加,删除,添加时请按照示例进行制作,建议先将数据库备份再修改 4、即时登陆网站,站长可以随时登陆自己的网站,但是登陆以后只能在他选定的目录所显示的页面中的“更多”网站页面中显示出来,只有在管理员审查并生成页面以后才能直接在目录页面看到 5、模糊查找, 6、布尔查找,支持and(*) or(|) not(-)等布尔表达式 例如:烟台*一百-新闻 或者:烟台 and 一百 not 新闻 如果只需要and连接,可以只输入 烟台 一百,这与 烟台*一百、烟台 and 一百 效果等同 搜索结果将会把相关关键词以特殊的颜色显示出来 7、常用关键词页面自动生成,用户输入查找的关键词都保存在数据库中,如果有相同的关键词则这些关键词数量累加,管理员管理的时候可以生成排名在头几位的关键词页面,也就是提前替用户把这些关键词提前搜索出来了,并且生成了静态的html页面,用户在搜索这些关键词时,就可以直接显示这些已经生成的页面,避免了大量的查询数据库,节省了服务器资源 管理:选择关键词管理,系统会列出数据库中已经存在的可以生成的关键词,以及网友在使用这个搜索引擎时用的关键字(只选取排名头100个),管理员可以随意生成需要的关键词页面 8、网站顺序,在某个目录下的网站数目很多的时候,排在上面的网站被访问的几率比排在下面的网站几率要大得多,因此我又增加排名功能,管理员可以设定某个网站在该目录下的排名 9、单目录搜索,当用户在某个目录浏览的时候,可以选择在该目录下搜索和搜索全部目录,选择在该目录下搜索可以只搜索属于该目录以及该目录的子目录下的网站 10、静态页面在线生成,在管理界面可以在线生成所有目录下的页面以及关键词页面 11、二次搜索功能,当用户在搜索某个关键词以后,系统列出了〉20个结果以后,就会出现二次搜索界面,用户可以选择在这些结果中再次搜索,比如要求结果必须不包含某个关键词或者必须再包含某个关键词 12、模版的在线修改,不同的页面模版有不同的规则 14、所有目录在线动态修改,自动更新以前的页面 15、动态生成网站首页(需要模版支持) 16、分类参照:指一个分类类目名分在一个上级类目下,而在另一个类目下作参照。以@作后缀的类目名。

2,129

社区成员

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

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