点击上方“蓝字”关注我们目录

系统设计

4.1 搜索引擎模型

模型包括爬虫、索引生成、查询以及系统配置部分。爬虫包括:网页抓取模块、网页减肥模块、爬虫维持模块。索引生成包括:基于文本文件的索引、基于数据库的索引。查询部分有Ajax、后台处理、前台界面模块。如图4所示。

4.2 数据库的设计

本课题包含一张用于存放抓取回来的网页信息如表1。

4.3模块设计

该模型按照功能划分为三个部分,一是爬虫抓取网页部分,二是从数据库建立索引部分,三是从前台页面查询部分。系统的功能流程(如图5.1和5.2)。

该系统用3个模块来实现搜索引擎的主要功能。流程如上图所示。

从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件。这条件可以是限定的谋个域名空间、或者是限定的网页抓取级数。当在获取URL时存在这样的问题就是在实际应用中主要以绝对地址和相对地址来表现。绝对地址是指一个准确的、无歧义的Internet资源的位置,包含域名(主机名)、路径名和文件名;相对地址是绝对地址的一部分。然后把抓取到的网页信息包括网页内容、标题、链接抓取时间等信息经过‘减肥’后保存到网页存储数据库表里。然后通过正则表达式,去掉多余的HTML标签。因为抓取的网页含有HTML标签、Javascript等,对搜索多余的信息,如果抓取到的网页不经过处理就会使搜索变得不够精确。

让爬虫程序能继续运行下去,就得抓取这个网页上的其它URL,所以要用正则将这个网页上的所有URL都取出来放到一个队列里。用同样的方法继续抓取网页,这里将运用到多线程技术。

为了对文档进行索引,Lucene提供了五个基础的类,他们分别是Document,Field,IndexWriter,Analyzer,Directory Document是用来描述文档的,这里的文档可以指一个HTML页面,一封电子邮件,或者是一个文本文件。一个Document对象由多个Field对象组成的。可以把一个Document对象想象成数据库中的一个记录,而每个Field对象就是记录的一个字段。在一个文档被索引之前,首先需要对文档内容进行分词处理,这部分工作就是由Analyzer来做的。Analyzer类是一个抽象类,它有多个实现。针对不同的语言和应用需要选择适合的Analyzer。Analyzer把分词后的内容交给IndexWriter来建立索引。

所有的搜索引擎的目标都是为了用户查询。通过查询页面,输入关键字,提交给系统,程序就开始处理,最后把结果以列表的形式显示出来。在用Lucene的搜索引擎中,用到了Lucene提供的方法,可从所建立的索引文档中获得结果。

系统实现1开发环境

开发平台的选择:本系统的开发平台选择微软公司的.NET,开发工具采用ASP.NET。.NET是Microsoft面向Web服务的平台,由框架、Web服务、.NET企业服务器等几部分组成,提供涉及面较广、功能较全面的解决方案。数据库选择:根据需求分析选择了MSSQL Server 2000。

5.2 关键代码详解

5.2.1代码结构

如图6:

在网页爬虫Console端应用程序里输入一个有效的URL后这部份就开始从第一个URL开始遍历相关的链接并把相关的信息写入到网页数据存储数据库里,然后就由索引生成程序读取网页数据存储数据库,对每条记录生成索引记录,存放于生成的索引库文件里。生成索引需要调用Lucene.Net类。索引生成后在查询部分就能够在网页上输入关键字,对刚才抓取的信息的查询。并可以定位到信息的出处。下面对各部分关键代码进行详解。

2爬虫部分

这部份的功能就是从输入的URL开始遍历各个相关的网页,它包括三个功能模块:网页抓取模块、网页减肥模块、爬虫维持模块。

首先定义一些变量用于保存抓取到的网页信息,urlList用于保存当前页面上的URL集合。然后根据全局变量url抓取此URL的网页信息到字节流变量里,经过转码后读取到变量PageString里,下步通过函数GetHttpUrl(PageString)对PageString中的URL标记进行提取并返回到urlList变量里,函数GetTitle(PageString)、parseScript(PageString)、parseHtml(PageString)、parseChar(Content)分别对网页信息变量获取标题、去除脚本块、去除HTML标记、去除特殊字符操作。再下步就是对获取到的标题、网页内容、链接等信息调用数据库操作通用类DAI保存到数据库里,这就实现了一个网页的抓取。再下步就是循环的对获取到的URL列表创建线程,针对每个URL来循环的执行上面的网页信息的抓取操作。具体代码如下:

private staticvoid UrlThread()

{

String  ;

String  Content="";

String  mata="";

string  URL="";

string[]  urlArr = null;

StringBuilder urlList = newStringBuilder();

System.Net.WebClient Client=newSystem.Net.WebClient();

try

{

Streamstrm=null;

try

{//读取一个URL的信息到流变量里

Stream     strm=Client.OpenRead(url);

}

catch

{

console.WriteLine("url无法找到!");

return;

}

StreamReadersr=new StreamReader(strm,Encoding.GetEncoding("gb2312"));

StringPageString=sr.ReadToEnd();//从流中读取网页信息到字符串变量中

strm.Close();

urlList= GetHttpUrl(PageString);

title=GetTitle(PageString);

Content= parseScript(PageString);  //去掉脚本的网页文本

Content=parseHtml(PageString);   //得到去了HTML标签的网页文本

URL=url;

mata="";

Content= parseChar(Content);

if((title!= "" || title != string.Empty) && URL != "")

{

DAI.RunSqlNonQuery("insert intoWebContent(url,content,title,mata)                                        values('"+URL+"','"+Content+"','"+title+"','"+mata+"')");

Console.WriteLine("对url:"+URL+"相关信息写入数据库成功!");

}

else

{

Console.WriteLine("对url:"+URL+"相关信息写入数据库失败!");

}

urlArr=urlList.ToString().Split('|');

//对前面获取的URL列表循环的创建线程再执行本方法实现爬虫的维持

for(inti=0;i

{

url=urlArr[i];

if(url == "" || url == null ||url == string.Empty)

continue;

Thread th = new Thread(new ThreadStart(UrlThread));

th.Start();

}

}

catch{}

}

3索引生成

这部分包含对文本的索引生成以及对数据库数据的索引生成,下面只对数据库索引生成的关键代码进行介绍:

下面这段代码实现对数据库里存储的记录创建索引。主要通过Lucene提供的方法来协助实现。

publicIndexer(string indexDir)

{

#region Lucene Code

首先通过标准分词定义了一个索引写入器

IndexWriter writer = newIndexWriter(indexDir, new StandardAnalyzer(), true);

在创建索引库时,会合并多个Segments文件。此方式有助于减少索引文件数量,减少同时打开的文件数量。

writer.SetUseCompoundFile(false);

//删除以前生成的索引文件。

System.IO.Directory.Delete(iDexDir,true);

#endregion

DateTimestart = DateTime.Now;

DoIndexByDB(writer);//

DateTime end= DateTime.Now;

int docNum =writer.DocCount();

Console.WriteLine("IndexFinished. {0} Documents takes {1} second.",

docNum,((TimeSpan)(end - start)).TotalSeconds);

writer.Optimize();

writer.Close();

}

使用Lucene提供的方法对数据库中的每条记录建立索引实现如下:

Document doc= new Document();

Console.WriteLine("Indexing{0} ", row["title"].ToString());

doc.Add(Field.Text("contents",row["content"].ToString()));

doc.Add(Field.Keyword("title",row["title"].ToString()));

doc.Add(Field.Keyword("mata",row["mata"].ToString()));

doc.Add(Field.Keyword("CreateDate",row["CreateDate"].ToString()));

doc.Add(Field.Keyword("Url",row["Url"].ToString()));

doc.Add(Field.Keyword("ID",row["ID"].ToString()));

writer.AddDocument(doc);

5.2.4页面查询

这部分主要完成的功能是获取前台表单中输入的关键字,在程序中获取查询结果,最后把列表显示在前台页面。

Ajax在此部分中被使用到,它完成的功能是部分刷新页面,不需整个页面的重新加载。为了方便的在程序中使用Ajax,此系统引用了封装完善的Ajax类库。在程序中注册后,在html里就可以使用Javascript来调用后台的程序。选取部分代码来说明:

首先在页面后台程序中进行Ajax注册,代码如下:

private voidPage_Load(object sender, System.EventArgs e)

{

//ajax注册

AjaxPro.Utility.RegisterTypeForAjax(typeof(Search));

}

如果前台Javascript需要调用某个方法,那就在那个函数前加上[AjaxPro.AjaxMethod],表示此方法属于ajax应用。

[AjaxPro.AjaxMethod]

publicstring SearchResult(string keywords,string pageNo)

{

其中,前台所存在的文字的代码如下:

StringBuilder sb = new StringBuilder();

sb.Append("

结果数:"+result+" 所用时间:"+t+"毫秒");

前台显示结果记录的代码,动态生成table标签,如下:

for(int i = startNum ; i < endNum;i++)

{

在显示内容中,仍然使用到了Lucene提供的类,可以方便的从所建立的索引文档中获取网址,网页标题,内容,时间。

Document doc = hits.Doc(i);

content=doc.Get("contents");

content=content.Replace(keywords,""+keywords+"");

sb.Append("

");

sb.Append("

"+doc.Get("title")+"");

sb.Append("

");

sb.Append("

");

sb.Append("

"+content+"
"+doc.Get("CreateDate")+"");

sb.Append("

");

}

}

源文件

详情请关注小编继续了解,免费赠送源代码与论文哦!

计算机毕业设计(源程序+论文+开题报告+文献综述+翻译+答辩稿)

联系QQ:2932963541进行咨询

网站地址:http://www.webtmall.com/扫码关注最新动态更多精彩,点击下方“

datetime 索引_【免费毕设】ASP.NET基于Ajax+Lucene构建搜索引擎的设计和实现(源代码+论文)...相关推荐

  1. 【免费毕设】基于Ajax+Lucene构建搜索引擎的设计和实现(源代码+lunwen)

    4.2 数据库的设计 本课题包含一张用于存放抓取回来的网页信息如表1. 4.3 模块设计 该模型按照功能划分为三个部分,一是爬虫抓取网页部分,二是从数据库建立索引部分,三是从前台页面查询部分.系统的功 ...

  2. pcap文件解析工具_【免费毕设】PHP网络数据包分析工具的设计与开发(源代码+论文)...

    点击上方"蓝字"关注我们目录 系统设计 网络数据包分析系统的设计 整个网络数据报分析工具采用模块化的设计思想,原因是许多程序太长或太复杂,很难写在单一单元中.如果把代码分为较小的功 ...

  3. 【毕业设计】基于JAVA音像店租赁管理系统的设计与实现(源代码+论文)

    这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的理念缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的各类系统很难达到老师的要求. 为了大家能够顺利并以最少的精力通 ...

  4. ajax 提交 .net ispostback不执行,ASP.NET基于Ajax的Enter键提交问题分析

    本文实例讲述了ASP.NET基于Ajax的Enter键提交.分享给大家供大家参考,具体如下: 近日遇到一个Enter键的问题,总结下: 1. 首先复习下html form对Enter的响应,不同的浏览 ...

  5. 基于Android公交查询系统的设计与实现(论文+程序设计源码+数据库文件)

    [摘 要]随着互联网的技术的不断更新发展,人们生活节奏也在不断的加快,对于网络的依赖也越来越紧密,尤其是在等公交,经常会错过班次,但又不知道,下次班次几点发车,这样会导致乘客花掉大把时间在等待,如果可 ...

  6. ASP.NET网络在线考试系统(源代码+论文)ASP.NET网络商店销售管理系统的设计与实现(源代码+论文)

    引言 1.1开发背景 随着网络技术的飞速发展,网络经济与人们的生活越来越紧密的联系在一起,随着信息技术的发展,网上购物与网上销售也在逐渐发展和普及.消费者与销售商都迫切需要一种简便与高速高效的购物与销 ...

  7. asp.net师电子化信息库的设计与实现(源代码+论文)ASP.NET汽车销售管理系统的设计与开发(源代码+论文)

    asp.net师电子化信息库的设计与实现(源代码+论文)ASP.NET汽车销售管理系统的设计与开发(源代码+论文) 随着人们生活水平的不断提高,人们对汽车的消费和需求也越来越旺盛.很多汽车销售公司的业 ...

  8. java ee论坛系统代码_Forum 基于JavaEE的论坛系统的设计与实现 源代码 Develop 238万源代码下载- www.pudn.com...

    文件名称: Forum下载 收藏√  [ 5  4  3  2  1 ] 开发工具: Java 文件大小: 1711 KB 上传时间: 2013-10-05 下载次数: 1 详细说明:基于JavaEE ...

  9. 考试成绩分析系统php,ASP考试成绩分析系统的设计与实现(源代码+论文)

    ASP考试成绩分析系统的设计与实现(源代码+论文) 摘 要 在不断信息化的今天,网络的出现让人们能够更快地获取更多的信息.各个领域都引进了计算机网络来为他们提高办事效率.在学校的教学管理中,利用计算机 ...

最新文章

  1. 待解决--LaTex为什么其他符号可以用,插入大于等于,或者小于等于就报错?
  2. python函数是一段具有特定功能的语句组_Python学习笔记(五)函数和代码复用
  3. Nginx的Gzip模块配置指令(二)
  4. python中的loop_django学习笔记之forloop
  5. vi/vim 编辑器详解
  6. 责任链模式(Chain of Responsibility Pattern)
  7. oracle 索引并行 hint,并行HINT并不一定起作用。
  8. Git 使用文档( git pull/fetch )
  9. 从分析***方式来谈如何防御DDoS***
  10. linux dd来加载驱动,linux 加载raid驱动
  11. 云豹直播源码v8.2
  12. 高等代数章节知识回顾(干货笔记)
  13. Grails4 使用Audit-Logging Stampable 出现报错:HHH000142: Bytecode enhancement failed
  14. JAVA计算机毕业设计劳务外包管理系统(附源码、数据库)
  15. linux根文件系统树制作
  16. 网页端调用企业微信扫一扫 详细过程
  17. 2005中国千强镇名单
  18. js实现登录页面的背景图片的随机展示
  19. 域控下发脚本_域控下发脚本,安装zabbix客户端
  20. lstm timestep一般是多少_Keras的LSTM的时间步长是多少?

热门文章

  1. Lesson Plan 教学计划 翻译
  2. Python学习笔记:文件(File)
  3. java date只保留年月日_java.util.Date、java.sql.Date、java.sql.Timestamp区别和总结
  4. 严格对角占优矩阵特征值_二次型和特征值
  5. 【Python】Python3.7.3 - sys.path 模块搜索路径详解
  6. Intel Core Enhanced Core架构/微架构/流水线 (7) - 栈指针跟踪器/微熔合
  7. 关于oracle数据库论文,Oracle数据库研究论文 有关Oracle数据库的论文
  8. 统计长整数n的各位上出现数字1、2、3 的次数
  9. c语言四大淡水湖大小设计任务,[讨论]四大淡水湖的大小排序问题(逻辑题)
  10. python3指定目录所有excel_如何用python遍历文件夹下的所有excel文件