最近想研究一下搜索引擎,看资料前,前几晚趟在床上初步琢磨了一下;其实自己以前也有些零星的想法,先把自己的初步方案记录下来。再和Lucence等对比一下,检验一下自己的想法。
主要是搜索引擎的基本架构和数据模型。
1. 基本架构
按照使用这么多年Yahoo,Baidu的经验,Search Engine要做的事儿就是:输入几个关键字,查询出很多的网址列表。 列表一般按匹配度,网址的跳转频率等排序,也要简单列出该网页的前几十个字作为摘要。
所以查询模块是最外层的,也是第一个模块。
Engine内部要存储这些网址列表和关键词信息,首先要采集网址数据。因此采集模块是整个系统的数据来源。采集时,要分析网页中词(Word),并建立词和网页之间的关联,因此词法分析模块是采集后的一个数据处理模块。
大概先这么多吧:
1) 采集
2) 词法分析
3) 搜索
4) 数据存储(DB或File)
2. 模块及处理
1) 资源采集模块(Resource Collect)
互联网的所有信息以资源形式出现,虽然资源有不同形式:网页,普通文本,图片,视频,音乐等,但都可以用 URL 来唯一标识。
先只考虑对网页的搜索处理。
初步可以考虑,根据给定几个门户网站进行层次性采集。比如:从 sohu.com 首页,采集该页面所有链接 Link ,在对所有链接再进行同样的分析,由于网页一个链多个,不断向下链接,因此仅从一个给定的 URL向下分析,就能分析出很多URL,可能无穷尽,因此可以指定采集到那个层次深度 deep。 采集将所有的网页URL信息及基本信息存入 URL 库。
动态采集:比如你在javaeye中发表一篇新blog,google过会就能搜索到了。肯定不是上面的采集方法。至于什么方法,我暂时没想到,到时再看相关资料。暂时只考虑第一种采集。
2) 词法分析(Word Analyze)
对采集的URL库逐一进行分析,目的是分析出每个网页文本内容包含的 Word,并建立 Word 和 URL的对应关系索引。
英文分词容易,按空格。而中文比较棘手。但中文中的词在语言学上应该是一个有限集合 WordSet,假定符合语义的词都在一个字典中 dictionary,那么,分析URL时,对汉字的组合进行字典检查,符合语义的词才保存到 Word 库中。
词法分析,暂定按汉字个数组合依次分析:2个,3个,4个。OK,先这么多,多的也不管啦。也就是说假定合法的汉语Word只包含2,3,4个汉字。
3) 搜索(Search)
单词搜索:用户输入单个Word,系统在数据中进行查询。按Word-URL索引进行快速等值匹配。将符合的URL列表返回,包含网页标题,URL,前50字的摘要等信息。URL列表的排序是个关键,按下列顺序排序:标题匹配,摘要匹配,正文匹配,URL被搜索次数。
每次搜索,系统对被搜索Word的搜索次数+1,结果集合中的网页URL被搜索次数+1, 被点击的结果URL,对其点击次数+1.
先不考虑分页。
3. 数据模型
1) 首先有几个基本数据项:网页(URL),词(Word),词组(WordGroup)。
词库 Word:wordID, word
词组库: WordGroup:wordGroupID, wordGroup
网页 URL: 网页是 text/html 类型的资源,它有几个基本属性:
URL,
标题(Title),
摘要(Abstract),
建立时间(Time),只入URL库被索引起来的时间。
其中URL是唯一标识,互联网上,任何资源都可以用一个URL唯一表示,因此,被索引的就不只是网页,图片,视频,一般文件等都可以作为引擎搜索的对象。
2) 匹配 (Match关系)
在词法分析时,所有词都是被选关键词,要快速查询,需要建立所有词和网页的关系索引,因此需要URL-Word关系,N:M, 这个关系就是匹配索引(MatchIndex)。 词法分析模块的结果就是生成Word词库,URL库和 Match 关系。 查询时,就可以根据Word快速找到网页(或URL)。
Match属性:
wordID,
urlID,
keywordMatch, 网页关键词是否匹配,用<meta/> keyword进行判断;
urlMatch,url是否匹配
abstractMatch,摘要匹配次数,
fullTextMatch, 除摘要外的全文匹配次数,
matchLocs, 摘要和全文匹配位置列表,记录多个位置,逗号隔开,格式: "loc1,loc2,loc3", 例如"3,19,230"
matchTime, 词法分析记录下此匹配记录的时间
3) URLGroup: 按词组搜索肯定是要考虑的,因此也要建立词组和网页的关系:URL-WordGroup。词组是查询时输入的,是分散的几个word组成的一个临时组,WordGoup也是在查询阶段建立的。
4) WordGroupMatch: wgID,urlID.
5) SearchRecord: 对搜索查询要做记录,主要是记录用户搜索关键词的频率。SearchRecord:WordID,URL,Time,IP.
6 WordFrequency: 搜索结果要记录输入的关键词频率:WordFrequency:Word,Frequency.
7) 相应的,需要有:WordFGrouprequency
URLFrequency: 搜索结果对匹配的网页也要记录它的频率,让用户的搜索行为反应到网页被搜索的频率上,以后的查询结果,不断根据网页被搜索的次数调整在搜索结果中的顺序。URLFrequency:URL,frequency
分享到:
相关推荐
本项目"基于Python的搜索引擎设计与实现"聚焦于利用Python技术来创建一个功能完备的搜索系统,涵盖从数据抓取、预处理到索引建立、查询处理等多个关键步骤。 1. **数据抓取**:搜索引擎的第一步是获取网页数据。...
《自己动手写搜索引擎》这本书是面向对搜索引擎技术感兴趣的读者,特别是对搜索引擎的原理、实现机制以及如何构建一个简单的搜索引擎有探索欲望的人群。这是一份压缩包文件,包含了一个PDF文档,提供了关于搜索引擎...
### 高清彩版 自己动手写搜索引擎 #### 搜索引擎概述 搜索引擎是现代互联网的基础应用之一,它通过网络爬虫技术抓取互联网上的信息,然后对这些信息进行索引和存储,最后根据用户的查询需求返回相关的搜索结果。...
《搜索引擎的设计与实现》这篇毕业论文是基于Java技术栈,结合Struts、Hibernate和Spring框架进行开发的。这个项目不仅理论研究深入,还包含了实际可运行的代码,为读者提供了全面理解搜索引擎工作原理和实现方法的...
本文将重点探讨搜索引擎中的数据结构及其原理,通过对核心概念的理解,帮助读者更好地掌握搜索引擎的工作机制。 #### 二、预备知识 在深入探讨搜索引擎的数据结构之前,我们需要对一些基本的概念有所了解。虽然...
《自己手动写搜索引擎》这本书深入浅出地介绍了搜索引擎的工作原理和设计思路,为读者揭示了这个看似复杂但实际上由一系列基础技术构成的系统。下面将详细阐述搜索引擎的相关知识点。 一、搜索引擎的组成部分 1. *...
搜索引擎技术是互联网时代的核心技术之一,它使得用户能够高效、快速地从海量信息中找到所需内容。本设计将深入探讨搜索引擎技术...通过学习和实践搜索引擎技术,我们可以更好地理解和利用这个充满无限可能的信息海洋。
本书由搜索引擎开发研究领域年轻而有活力的科学家精心编写,作者将自己对搜索引擎的深刻理解和实际应用巧妙地结合,使得从未接触过搜索引擎原理的读者也能够轻松地在搜索引擎的大厦中遨游一番。 编辑推荐编辑 《走进...
在学习这个毕业设计源码时,你可以深入理解搜索引擎的工作原理,掌握网页抓取、文本处理和索引构建的关键技术。通过实践,你还可以了解到如何优化搜索性能、提高查询精度,这将对你的编程技能和理解信息检索系统的...
开发自己的搜索引擎是一项复杂且具有挑战性的任务,涉及信息检索、数据处理、网络爬虫等多个领域的知识。在这个过程中,Lucene 和 Heritrix 是两个非常关键的工具,它们分别在搜索引擎的构建中扮演着不同的角色。 ...
在本课程设计中,我们将深入探讨“搜索引擎web”的构建,这是...通过这次课程设计,你将不仅学习到搜索引擎的基本原理和技术,还能实践如何构建一个实际的搜索引擎系统,这对于理解和掌握web信息检索技术具有重要意义。
本项目提供了一套用Java和JSP(JavaServer Pages)编写的搜索引擎源代码,这对于学习和理解搜索引擎的工作原理,以及Java后端开发与Web交互有极大的帮助。下面我们将深入探讨相关知识点。 首先,Java是一种广泛使用...
9. **移动优先**:随着移动设备的普及,许多国外搜索引擎优化了移动端体验,如响应式设计、AMP(Accelerated Mobile Pages)技术,以提升手机和平板用户的搜索效率。 10. **语音搜索**:现代搜索引擎支持语音输入,...
通过上述讨论,我们可以看出,面向主题的搜索引擎的设计与实现涵盖了多个层面,从底层的数据爬取和处理到上层的用户交互和个性化服务,都需要深入理解和巧妙应用各种技术。在Java环境下,我们可以充分利用已有的工具...