站内全文搜索引擎的设计与实现.docx

上传人:b****8 文档编号:10239285 上传时间:2023-02-09 格式:DOCX 页数:14 大小:181.42KB
下载 相关 举报
站内全文搜索引擎的设计与实现.docx_第1页
第1页 / 共14页
站内全文搜索引擎的设计与实现.docx_第2页
第2页 / 共14页
站内全文搜索引擎的设计与实现.docx_第3页
第3页 / 共14页
站内全文搜索引擎的设计与实现.docx_第4页
第4页 / 共14页
站内全文搜索引擎的设计与实现.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

站内全文搜索引擎的设计与实现.docx

《站内全文搜索引擎的设计与实现.docx》由会员分享,可在线阅读,更多相关《站内全文搜索引擎的设计与实现.docx(14页珍藏版)》请在冰豆网上搜索。

站内全文搜索引擎的设计与实现.docx

站内全文搜索引擎的设计与实现

 

毕业论文(设计)

论文(设计)题目:

站内全文搜索引擎的设计与实现

 

摘要

淘宝的出现,电子商务井喷式的发展,以及越来越多的社交网站、团购网站、专门类信息网站的出现,海量的数据蕴含在网站之内。

巨大的信息量无疑是把双刃剑,在给用户提供丰富信息的同时,也给用户提了一个大大的难题,如何在这海量信息中找到用户想得到的信息,尤其是当用户提供的是一组信息不是十分明确的词组时,如何能讲有用的信息条理清晰地提供给用户,这进一步刺激了站内搜索技术的发展。

本文在总结站内搜索功能的同时,在研究了站内搜索相关技术的基础上,设计并实现了一个简易的站内搜索引擎,实现了在内搜索的主要功能。

关键词:

站内搜索;.NET;Lucene.NET

ABSTRACT

TheTaobaoemergenceofe-commercedevelopmentspurt,aswellasagrowingnumberofsocialnetworkingsites,groupbuyingsites,theemergenceofspecializedclassinformationwebsitecontainsvastamountsofdatawithinthewebsite.Ahugeamountofinformationisundoubtedlydouble-edgedsword,givingusersawealthofinformation,butalsotoprovidetheuserabigproblem,howtofindauserwantsinformationinthismassofinformation,especiallywhentheuserisofferedawheninformationisnotveryclearsetofphrases,howcanspeakclarityofusefulinformationavailabletousers,whichfurtherstimulatedthedevelopmentofthestationsearchtechnology.

Thispapersummarizesthestationsearchfunctionatthesametime,inthestudyofthestationsearchrelatedtechnologies,basedonthedesignandimplementationofasimplesitesearchengine,includingtherealizationofthemainfunctionsofthesearch.

Keywords:

SiteSearch;.NET;Lucene.NET

第1章绪论

自从有了计算机以后,人类开始用计算机保存信息,有保存就需要查找,于是出现了检索技术。

文本检索技术的发展从最初的SMART文档检索系统到AltaVista搜索引擎,到现在的搜索巨头Google,人们习惯在互联网上搜索需要的信息[1]。

同时在同一个网站内往往拥有大量的资源,怎样在网站内部使用户能够迅速的找到所需信息,已成为一个网站能够吸引用户的重要方面。

随着信息地快速增长,这一方面的需求越来越大,在很大程度上严重影响到Web站点的成功[2]。

因此,建立站内搜索引擎成为必要。

所谓站内搜索无非就是对数据库信息的检索,当然,数据库通过SQL查询也在一定程度上提供了这样的功能。

但是,数据库所提供的Like’%key-word%’查询,不但效率不高,尤其是在多字段查询时,而且所提供的仅仅是关键字的全信息匹配,所查询到的内容必须是“key-word”的顺序匹配,这对于大多数网站,尤其是大型网站来说,基于数据库查询的站内搜索往往出现检索数据不准确、更新慢、无法控制检索等问题[3]。

那么,如何来解决这个问题呢?

搜索引擎的出现给了人们带来了一线希望。

诸如Google、Baidu等全文搜索引擎能够提供一种基于全文信息的搜索方式,并且能够在所提供的一个或一组词中分离出具有一定含义的词,并以这些词为关键字搜索并得到包含这些关键字的信息[4]。

然而,我们无法做到在自己的网站中做出一个如Baidu、Google那样的搜索引擎。

但是,Lucene的出现,使这种实现成为可能,它是一个开放源代码的全文检索引擎工具包,利用Lucene建立的全文检索系统可以通过其丰富的分析技术达到令人满意的检索效果[5]。

1.1课题的研究背景与意义

在以往网站建设、企业信息系统搭建过程中,由于信息结构简单、内容稀缺,站内搜索乃至搜索都不是网站系统的必要装备。

但随着Web2.0带来的海量信息井喷式涌现,企业自身对信息架构、管理、发布的需求,以及用户对信息的组织、查询、可寻性的要求越来越高,于是站内搜索出现了。

淘宝的出现,电子商务井喷式的发展,以及越来越多的社交网站、团购网站、专门类信息网站的出现,海量的数据蕴含在网站之内。

巨大的信息量无疑是把双刃剑,在给用户提供丰富信息的同时,也给用户提了一个大大的难题,如何在这海量信息中找到用户想得到的信息,尤其是当用户提供的是一组信息不是十分明确的词组时,如何能讲有用的信息条理清晰地提供给用户,这进一步刺激了站内搜索技术的发展[6]。

站内搜索通俗来讲是一个网站或商城的“大门口”,一般在形式上包括两个要件:

搜索入口和搜索结果页面,但在其后台架构上是比较复杂的,其核心要件包括:

中文分词技术、页面抓取技术、建立索引、对搜索结果排序以及对搜索关键词的统计、分析、关联、推荐等[7]。

1.2研究现状

站内搜索主要提供的是全文搜索功能,常用的检索技术分为如下两种:

(1)使用关系数据库的like’%keyword%’查询来代替全文检索系统。

这种方法在信息量比较小的情况下,检索速度比较快,但是由于查询语句比较繁琐,在面对海量信息的情况下,检索速度会急剧降低,其性能也往往达不到要求,甚至影响数据库的其他正常使用,尤其是在网络状态下,这方面的缺陷尤为明显[8]。

(2)使用通用的数据库系统提供的全文检索功能。

一些信息化平台虽称实现了全文索引库,但其实质是模拟的全文索引库,其通过先检索放在关系数据库里的结构化数据,如题目、摘要、内容等,然后链接全文以获得全文,而真正实现全文检索的不多,而且在数据量比较大,特别是在海量数据的情况下,检索的效率仍然比较低[9]。

1.3本文的工作

本论文在研究了全文搜索相关文献的基础上,分析了Lucene.NET框架,基于.NET平台,实现了一个简单的站内搜索引擎,主要研究内容包括[10]:

(1)全文检索知识的研究。

包括全文检索的基本原理和相关理论;

(2).NET平台相关技术的研究。

包括,.NETFramework介绍,VisualStudio开发环境介绍;

(3)分词框架研究。

包括Lucene介绍及工作原理。

(4)设计并实现一个简单的站内搜索引擎。

第2章站内搜索引擎相关技术介绍

2.1全文检索技术

所谓全文检索,是一种将文件中所有文本与检索项匹配的文字资料检索方法。

全文检索系统是按照全文检索理论建立起来的用于提供全文检索服务的软件系统[11]。

全文检索能够将存储于数据库中整本书、整篇文章中的任意内容信息查找出来的检索。

它可以根据需要获得全文中有关章、节、段、句、词等信息,也就是说类似于给整本书的每个字词添加一个标签,也可以进行各种统计和分析。

例如,它可以很快的回答“《水浒传》一书中“宋江”一共出现多少次?

”的问题。

全文搜索技术是指计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,搜索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。

这个过程类似于通过字典中的检索字表查字的过程。

检索主要分为按字检索和按词搜索两种。

按字检索是指对于文章中的每一个字都建立索引,检索时将词分解为字的组合。

对于各种不同的语言而言,字有不同的含义,比如英文中字与词实际上是合一的,而中文中字与词有很大分别。

按词搜索指对文章中的词,即语义单位建立索引,检索时按词搜索,并且可以处理同义项等。

英文等西方文字由于按照空白切分词,因此实现上与按字处理类似,添加同义处理也很容易。

中文等东方文字则需要切分字词,以达到按词索引的目的,关于这方面的问题,是当前全文搜索技术尤其是中文全文检索技术中的难点。

全文搜索系统是按照全文检索理论建立起来的用于提供全文检索服务的全文搜索系统。

一般来说,全文搜索需要具备建立索引和提供查询的基本功能,此外现代的全文搜索系统还需要具有方便的用户接口、面向WWW的开发接口、二次应用开发接口等等。

功能上,全文搜索系统,核心具有建立索引、处理查询返回增加索引、优化索引结构等等功能,外围则由各种不同应用具有的功能组成。

结构上,全文搜索系统核心具有索引引擎、查询引擎、文本分析引擎、对外接口等等,加上各种外围应用系统等等共同构成了全文检索系统[12]。

2.2.NET相关技术

2.2.1.NET平台

.NET框架是一种新的计算平台,它简化了在高度分布式Internet环境中的应用程序开发[13]。

Microsoft.NETFramework结合强大的功能与跨技术边界无缝通信新技术,构建一个能支持各种业务流程的应用程序。

.NET框架4.5可以更方便地编写异步代码、同步代码中的控制流混合,它提供了更高的性能、可靠性和安全性。

它为软件向多样化的移动组件发展的情况也提供了保护。

在一个改进的、可扩展的策略下,用户能够运行功能强大的代码,而同时降低相关的风险。

.NET平台使人们能够通过简单的方式在其上构建各种应用方式,多样化地从网站获取信息,并解决网站之间的协同工作。

.NETFramework4.5提供了托管执行环境、简化的开发和部署以及与各种编程语言的集成,如图1所示。

图1.NETFramework

2.2.2VisualStudio2012开发平台

MicrosoftVisualStudio(简称VS)是美国微软公司的开发工具包系列产品。

VisualStudio是一个基本完整的开发工具集,它包括了整个软件生命周期中所需要的大部分工具,是目前最流行的Windows平台应用程序的集成开发环境。

现在较新的版本是2012版本[14]。

VisualStudio2012作为一个集成解决方案,适用于无论是个人或者各种规模的开发团队。

VisualStudio2012实现了同事间的无缝协作,提高了生产效率与专注度,最终好的点子变成了优秀的现实应用。

2.3Lucene.NET介绍

Lucene.NET是Lucene的.NET版本,被应用于.NET平台上。

Lucene是一套用于全文检索和搜寻的开源程式库,由Apache软件基金会支持和提供。

Lucene提供了一个简单却强大的应用程式接口,能够做全文索引和搜寻。

在Java开发环境里Lucene是一个成熟的免费开源工具。

就其本身而言,Lucene是当前以及最近几年最受欢迎的免费Java资讯检索程式库。

人们经常提到资讯检索程式库,虽然与搜索引擎有关,但不应该将资讯检索程式库与搜索引擎相混淆[15]。

作为一个开放源代码项目,Lucene从问世之后,引发了开放源代码社群的巨大反响,程序员们不仅使用它构建具体的全文检索应用,而且将之集成到各种系统软件中去,以及构建Web应用,甚至某些商业软件也采用了Lucene作为其内部全文检索子系统的核心。

Lucene以其开放源代码的特性、优异的索引结构、良好的系统架构获得了越来越多的应用。

第3章站内搜索引擎的设计与实现

3.1站内搜索引擎功能需求

站内搜索是提供网站内部内容的检索和搜索功能。

随着网站内容的增长,站内结构也越来越复杂,用户很难准确浏览全部内容,查找所需信息也越来越难。

站内检索的需求也逐渐显露出来。

一个好的站内搜索引擎主要包含如下功能:

●搜索提示功能,用户输入关键字,自动出现下拉框显示相关搜素关键词,这个功能大家都很熟悉了,比如XX淘宝都在用;实用性很强,的确为用户提供了很多方便;其实这个功能还有其他的作用,就是引导用,避免了原来用户随意输入不太符合规则的关键字,导致搜搜无结果的尴尬。

尤其对产品销售型的网站,友好的提示,让客户最快找到他要的东西。

●用户搜素记录,用户在搜索的时候,做一下记录处理,记录一下用户输入的关键字。

做搜索数量统计,发觉自己网站用户的搜索倾向,配合高搜索率的关键字做一些促销及专题,满足用户的胃口。

从这个功能的延伸,就是尽可能的获取用户的详细信息,这个可以配合网站会员功能,具体实现起来:

当用户以登陆方式搜索时候,记录搜索的关键字及用户会员ID。

这样就获得了用户信息,便可通过邮件等方式将其感兴趣的内容传达给他。

●搜索热门关键字,能让用户点的不让用户区输入,这就是人性化,搜索框下最好有经常被检索的关键字,这个关键字可以用上述第2点获取。

而且对于销售型的网站不同时期都要及时的更新。

●搜索结果页面,搜索出来后的结果页面也是不可忽视的,经常看淘宝的用户知道,搜索结果页面上方会有产品所属的分类,所属的型号,品牌、其实还可以加入一排相关搜索关键字,类似XX下方的相关搜索。

总之一步步的让用户根据自己的需求找到相应的产品,便捷从细节开始。

●方便用户查找网站信息。

我们经常会发生这样的事情:

明明记得有一篇写关于宝马试驾的的文件,就是想不起存放在什么地方了。

访问者也有类似困扰,只记得某个网站上说了关于某一事件的新闻,但不知道具体的链接在哪里。

另外,要是隐藏在目录很深的html文档可能自从网站建立到整个网站关闭也没有一个人看过,这些都不是我们所想要的。

站内检索毫无疑问可以解决上述问题。

同时,按照一个主题把所有相关文档提供给访问者,可以让访问者更全面的了解他所想要的东西,这增加了网站信息间的组织性和逻辑性,方便了访问者的使用,提升用户体验度。

3.2站内搜索引擎总体设计及数据库设计

本系统为实现一个简易的站内搜索引擎,可以嵌入到其他实用网站之中。

因此在设计上以简洁为主,总体设计如图2。

图2站内搜索总体设计

用户通过输入接口界面输入想查询的一个或若干个词到检索引擎,检索引擎与数据库通信,根据关键字查询数据库中相匹配的信息,在返回给用户界面,并在返回信息中高亮出用户所检索的信息。

为了模拟检索过程和内容,在数据库中创建了一个简单的数据表Article,如表1。

字段名

数据类型

是否允许为空

说明

ID

INT

编号,关键字

Title

NVARCHAR(50)

信息标题

[Content]

VARCHAR(MAX)

信息内容

表1Article表

第4章站内搜索引擎关键代码实现

4.1主界面

图3主界面(搜索前)

图4主界面(搜索后)

主要代码:

protectedListkeywords=newList();

protectedvoidbtnSearch_Click(objectsender,EventArgse)

{

string[]keywords=tbKeyWords.Text.Split(newstring[]{""},StringSplitOptions.RemoveEmptyEntries);

if(keywords.Length<=0)

{

lbAlert.Text="请输入关键字:

.";

return;

}

this.keywords=keywords.ToList();

DataAccessdataAccess=newDataAccess();

List

list=dataAccess.Search(this.keywords);

ShowResult(list);

}

longid=0;

if(!

IsPostBack&&

!

string.IsNullOrEmpty(Request.QueryString["id"])&&

long.TryParse(Request.QueryString["id"],outid))

{

DataAccessdataAccess=newDataAccess();

Data=dataAccess.GetArticle(id);

}

if(Data==null)

{

Data=newArticle();

}

用于高亮关键字的代码:

functionHightLightKeywords(){

varcontainer=document.getElementById("result");

varkeywords=newArray();

<%

for(inti=0;i

{

Response.Write(string.Format("keywords['{0}']='{1}';",i,keywords[i]));

}

%>

for(vari=0;i

{

vara=newRegExp(keywords[i],"igm");

container.innerHTML=container.innerHTML.replace(a,"

#FF0;'>"+keywords[i]+"");

}

}

HightLightKeywords();

第5章总结与展望

本设计实现了一个简易的站内搜索引擎,通过该设计的制作,使我对专业所学有了进一步的认识,在增强实际操作能力的同时,也对相关理论知识的关联性有了更深的了解,更重要的是在这一过程中又学到了很多新的知识。

系统在经过测试,在运行过程中,能够达到预期的基本目标,得到较好的效果。

当然,鉴于能力和时间所限,还有诸如自动完成、关键字统计等功能还没有完成,这都是以后需要加强的方向。

参考文献

[1]陈立.全文检索引擎的设计研究[J].现代情报,2007(10):

56~58.

[2]蔡建超,郭一平,王亮.基于Lucene.Net校园网搜索引擎的设计与实现[J].计算机技术与发展,2006(11):

80~82.

[3]张校乾,金玉玲,侯玉波.一种基于Lucene检索系统的全文数据库的设计与实现[J].现代图书情报技术,2005

(2):

77~79.

[4]车东.在应用中加入全文检索功能——基于Java的全文索引引擎Lucene简介[EB/OL],2002-08.

[5]陈烨彬,黄琳.基于Lucene.Net的知识检索系统的设计与实现[J].开发案例,2008(11):

74~76.

[6]刘磊安,符志强.基于Lucene.et网络爬虫的设计与实现[J].电脑知识与技术,2010(8):

46~48.

[7]李文江,陈诗琴.基于L全文检索在文档管理中的应用[J].现代图书情报技术,2010(11):

50~52.

[8]杨文刚.基于L的档案垂直搜索引擎的实现[J].北京档案,2012(10):

88~89.

[9]蓝滨,王征.基于ASP.NET搜索引擎研究与实现[J].硅谷,2012(23):

43~45.

[10]邹燕飞,于成尊,赵亮.基于Lucene的文本搜索引擎的设计和实现[J].计算机与现代化,2011(9):

23~25.

[11]吕双,王小科.C#程序开发范例宝典[M].北京:

人民邮电出版社,2009(10):

50~322.

[12]宋华,现代物流成本的系统管理与控制[J].经济管理,2004(11):

56~57.

[13]马骏.ASP.NET项目开发案例教程[M].北京:

人民邮电出版社.2007(11):

100~224.

[14]卲丽萍.新一代Web开发技术ASP.NET的发展与探析[J].微计算机信息,2005(11):

50~52.

[15]王志晓.ASP.NET技术在电子商务系统中的应用研究[J].计算机工程,2003(18):

92~94.

致谢

历时将近半年的时间,终于完成了毕业设计及论文的工作,在设计制作和论文撰写的过程中遇到了无数的困难和障碍,都在同学和老师的帮助下度过了。

尤其要强烈感谢我的论文指导老师,他对我进行了无私的指导和帮助,不厌其烦的帮助进行论文的修改和改进。

另外,在校图书馆查找资料的时候,图书馆的老师也给我提供了很多方面的支持与帮助。

在此向帮助和指导过我的各位老师表示最中心的感谢!

感谢这篇论文所涉及到的各位学者。

本文引用了数位学者的研究文献,如果没有各位学者的研究成果的帮助和启发,我将很难完成本篇论文的写作。

感谢我的同学和朋友,在我写论文的过程中给予我了很多你问素材,还在论文的撰写和排版灯过程中提供热情的帮助。

最后感谢我的母校,两年来对我的大力培养,使我各方面都得到了提升。

对我以后人生的道路产生深远的影响。

由于我的学术水平有限,所写论文难免有不足之处,恳请各位老师和学友批评和指正!

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 文学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1