搜索引擎的设计与实现(一)从零开始?

毕业狗一枚,即将步入职场。仅以此系列,记录毕业设计中遇到的问题和解决的具体思路,重点不是完整的代码,而是得到完整代码的思考过程。所以只会贴出部分代码,勿怪。专业是电子商务,除了万恶的经管大类课程,技术方面学的是JavaEE,大二自学Android。大三下,有计算机学弟找我一起稿一个校自主研究基金的项目,就是垂直搜索引擎。大四签约后,一直在研究搜索引擎(垂直神马的,我也只能做到数据来源是垂直的,要实习,没时间折腾)。

  1. 真的是从零开始么
    相信刚开始接触一个新的领域的时候,大多数人都是一头雾水。一旦怀着一种畏惧的心去学习,就会花费太多的时间去重新建立自己的信心。但是,真的是从零开始么?其实,并非如此,我细数一下,以下技术都算比较熟悉(JS其实只能写写基本的),都有在搜索引擎中用到:
    HTML4.01 Transitional(/HTML 5),CSS2.0(/CSS3.0),JavaScript(简称JS),XML/Json(仅仅用于数据传输,AJax),Java(JDK 7)
    显然搜索引擎是B-S模式,前端就是页面渲染(HTML、CSS、Ajax),后端是服务器(Java,传输XML/Json)
    可见技术的基础是具备的,我们只是换中方式,利用技术进行整合开发。完全不用害怕,找到方向后上手很快的。
  2. 抓住要点
    搜索引擎,一说要开发这个,可能觉得很厉害的样子。结合Java开源的特性,满大街的找开源的搜索引擎,期望能得到参考,甚至改一改就能应付需求的。
    以上想法是也曾有过,不过,做这个更多的是因为兴趣,所以想了解更多的原理。再者,改一改就满足需求什么的。。。这也太难了
    即便是最为犀利的Nutch+Solr的企业级搜索组合,光是搭建环境跑起来,可能就是一整天。
    抓住要点很重要,能大大提高效率。我需要开发的是一个简单的(毕竟大学毕业设计)搜索引擎系统,这是目标。
    任何一个系统,必然有其组成部分,有的还可以分成具体的功能模块。而搜索引擎正是这种比较典型的系统,可以分为4个模块:

  • 采集器(爬虫)
    在互联网中游走,按照一定的策略(如深度优先遍历、广度优先遍历),发现和搜集信息(一般是镜像处理),保存到本地资料库。
  • 索引器
    解析采集器得到的文档,进行去噪后,构造索引,保存在本地索引库
  • 检索器
    根据用户的查询语句,经过语言处理,在索引库中快速检索文档,进行相关度评价(排序),并能按用户的查询需求合理反馈信息。
  • 用户接口
    接纳用户查询、显示查询结果、提供个性化查询项。

由于是以探究原理为主,故针对每个模块进行分析,选定合适的开源工具包使用,或针对开源资源进行改造。

你可能感兴趣的:(搜索引擎的设计与实现(一)从零开始?)