vlambda博客
学习文章列表

【论文参考】基于Ajax+Lucene构建搜索引擎的设计与实现(源代码+论文)免费下载



摘要:
通过搜索引擎从互联网上获取有用信息已经成为人们生活的重要组成部分, Lucene 是构建搜索引擎的其中一种方式。搜索引擎系统是在 .Net 平台上用 C# 开发的,数据库是 MSSQL Server 2000 。主要完成的功能有:用爬虫抓取网页;获取有效信息放入数据库;通过 Lucene 建立索引;对简单关键字进行搜索;使用 Ajax 的局部刷新页面展示结果。
论文详细说明了系统开发的背景,开发环境,系统的需求分析,以及功能的设计与实现。同时讲述了搜索引擎的原理,系统功能,并探讨使用 Ajax 与服务器进行数据异步交互,从而改善现有的 Web 应用模式。

关键字: Lucene.net;异步更新;Ajax;搜索引擎



目录:

【论文参考】基于Ajax+Lucene构建搜索引擎的设计与实现(源代码+论文)免费下载


需求分析:

3.1 同步环境

本系统的同步环境如图3:

【论文参考】基于Ajax+Lucene构建搜索引擎的设计与实现(源代码+论文)免费下载

4 方案设计

结合前面的同步原理,以及需求的介绍,下面给出同步的方案设计。

4.1 搜索引擎模型

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

【论文参考】基于Ajax+Lucene构建搜索引擎的设计与实现(源代码+论文)免费下载

4.2 数据库的设计

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

表1 网页数据存储表

逻辑字段名

物理字段名

字段类型

是否为空

主键

外键

说   明

编号

ID

int

NOT NULL

Yes


自增加

Url

Varchar(50)

NOT NULL




内容

Content

VARCHAR(1000)

NOT NULL




meta标签内容

Mata

Varchar(100)

NOT NULL




网页标题

Title

Varchar(100)

NOT NULL




创建时间

Createdate

Datetime(8)

NOT NULL




5.2.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  title="";

       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("insertinto WebContent(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<urlArr.Length;i++)

              {

                     url=urlArr[i];

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

                            continue;

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

                     th.Start();                           

              }                         

       }

       catch{}

}



END

联系我

获取更多资源

学习更上一层楼