0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于Lucene实现全文搜索引擎MYSearch的构建

电子设计 来源:郭婷 作者:电子设计 2019-07-25 08:07 次阅读

互联网最初设计是为了能提供一个通讯网络,即使一些地点被核武器摧毁也能正常工作。如果大部分的直接通道不通,路由器就会指引通信信息经由中间路由器在网络中传播。 最大的搜索引擎Google从2002年的10亿网页增加到现在近40亿网页;最近雅虎搜索引擎号称收录了45亿个网页;国内的中文搜索引擎百度的中文页面从两年前的7 000万页增加到了现在的2亿多。据估计,当前整个互联网的网页数达到100多亿,而且还在快速增长。用户要在如此浩瀚的信息海洋里寻找信息,犹如“大海捞针”,往往无功而返。如何从资源的海洋里找到自己需要的内容就成了关键问题,搜索引擎的出现和研究,使网络上的资源变得有序,使用户能更加方便快捷地找到所需资源。目前被大家广泛使用的搜索引擎如Google、百度等,其实现技术非常复杂,后台数据库也非常庞大,更新速度也很快。

1 Lucene基本技术原理

Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。

作为一个开放源代码项目,Lucene从问世之后,引发了开放源代码社群的巨大反响,程序员们不仅使用它构建具体的全文检索应用,而且将之集成到各种系统软件中去,以及构建Web应用,甚至某些商业软件也采用了Lucene作为其内部全文检索子系统的核心。apache软件基金会的网站使用了Lucene作为全文检索的引擎,IBM的开源软件eclipse[9]的2.1版本中也采用了Lucene作为帮助子系统的全文索引引擎,相应的IBM的商业软件Web Sphere[10]中也采用了Lucene。Lucene以其开放源代码的特性、优异的索引结构、良好的系统架构获得了越来越多的应用。

目前网络上有许多全文搜索引擎的开源代码,若想构建自己的全文搜索引擎,可以在这些开源代码的基础上进行。Lucene不是一个完整的全文索引应用,可以直接作为查询工具使用,而只是为全文搜索引擎的构建提供了基本的工具和设计方法。Lucene提供了一系列API,能够对文档进行预处理、过滤、分析、索引和检索排序。本文就是在Lucene基础上构建了一个全文搜索引擎MYSearch。

2 MYSearch工作流程

2.1 搜索引擎的基本构成

搜索引擎系统一般由蜘蛛(也叫网页爬行器)、切词器、索引器、查询器几部分组成。蜘蛛负责网页信息的抓取工作;一般情况下切词器和索引器一起使用,它们负责将抓取的网页内容进行切词处理并自动进行标引,建立索引数据库;查询器根据用户查询条件检索索引数据库并对检索结果进行排序和集合运算,再提取网页简单摘要信息反馈给查询用户。

2.2 MYSearch工作流程

MYSearch首先使用网络蜘蛛抓取网络上的可用网页链接,然后把抓取到的网页资源下载到本地计算机,对下载到本地计算机的网页进行初步的处理,去掉对搜索没有意义的信息和词汇。然后使用Lucene提供的索引功能,对处理后的信息资源建立索引,并且保存到索引数据库中。之后,根据用户提供的搜索信息,在索引中进行查询,并将搜索结果显示到用户搜索的界面上。其流程框图如图1所示。

基于Lucene实现全文搜索引擎MYSearch的构建

3 MYSearch实现

3.1 系统功能模块的划分

MYSearch全文搜索系统主要分为网络蜘蛛抓取、资源初步处理、建立索引、搜索以及显示等功能模块。

(1)网络蜘蛛抓取功能模块:首先根据事先设定好的网络入口地址和设置的搜索条件,读取网页的内容,分析网页中其他的链接地址,然后垂直链接到下一个网页,这样一直循环,直到网站的所有网页都抓取完成或者满足了搜索的条件为止。

(2)资源初步处理功能模块:将搜索来的网页中的信息进行相关处理,去掉没有用的格式内容和其他对搜索结果没有实际意义的信息。

(3)建立索引功能模块:将处理后的网页资源写入数据库,并使用倒排索引算法实现网页资源索引的建立。

(4)搜索功能模块:根据用户的搜索关键词,在已建好索引的数据库中,根据语素向量的匹配度和相似度进行相关的匹配,然后按照一定的排列顺序把搜索结果返回给用户。

(5)显示功能模块:将搜索结果按照一定的显示方式显示在页面中,供用户选择和浏览。

3.2 MYSearch全文搜索引擎的实现

3.2.1 网络蜘蛛

网络蜘蛛是指某个能以人类无法达到的速度不断重复执行某项任务的自动程序[1]。本系统中使用的蜘蛛程序是Nutch,核心是Crawl工具。它可以根据之前设定好的入口URL列表不断地自动下载页面,直到满足系统预设的停止条件。图2所示是Nutch的工作机制。

基于Lucene实现全文搜索引擎MYSearch的构建

3.2.2 网页初步处理

网页刚刚被抓取下来的时候,存在很多格式化的信息(如html的网页标记),还有很多多余的信息(比如“is,the,an”)。这些信息都是噪音,如果想要使搜索引擎更高效、更准确地运行,就要去除这些信息,留下有效的信息。

对于html标记的处理,首先就是准备一个空字符串,然后判断网页的文字中是否存在html的“<>”符号,如果是html“<>”的符号,就继续判断网页中的下一个字符,如果不是就把该字符保存到这个空字符串中;如果判断完成,就结束;否则就继续判断。对于多余信息,在Lucene中提供了相关的包进行处理。

通过上面的处理之后,下载的文件在建立索引的时候,就会更加便捷。

3.2.3 索引的建立

在日常的生活中,往往需要快速地从海量页面信息中定位页面资源。这样的需求就需要用索引技术来实现。索引建立的好坏直接影响搜索效果和用户的体验感觉,所以索引的建立方法十分重要。Lucene采用倒排索引算法建立索引[2],主要包括索引类(IndexWriter)、文档对象类(Document)和信息字段对象类(Field)。索引建立的过程为:

(1)建立索引器IndexWriter;

(2)建立文档对象Document;

(3)建立信息字段对象Field;

(4)将Field添加到Document;

(5)将Document添加到IndexWriter里面;

(6)关闭索引器IndexWriter。

Lucene将建好的索引信息存储在“_0.cfs”、“segments.gen”以及“segments_s”文件中。

3.2.4 信息搜索

用户提交的查询请求通常是一个词语或者短语,MYSearch搜索引擎在接受用户访问后会进行一系列处理并最终向用户提交。当用户输入关键词搜索后,由搜索程序从索引数据库中找到符合该关键词的所有相关文档。因为所有文档针对该关键词的相关度早已算好,所以只需按照现成的相关度数值排序。排序规则是相关度越高,排名就越靠前。然后,就会把查询到的信息返回给用户,并进行显示。基本查询流程如图3所示。

基于Lucene实现全文搜索引擎MYSearch的构建

3.2.5 搜索结果显示

良好的交互设计可以使用户的操作更加简便,可以使用户能够更快更准确地找到自己想要的信息,同时能够增加用户的满意度。MYSearch全文搜索引擎设计了一个简捷的搜索界面,用户在该界面中输入搜索条件,提交后就可以看到查询结果。

4 改进

搜索引擎(search engine)是指根据一定的策略、运用特定的计算机程序从互联网上搜集信息,在对信息进行组织和处理后,为用户提供检索服务,将用户检索相关的信息展示给用户的系统。分词就是为生成索引提供原材料,如果分词分得不明确,则生成的索引必然复杂,那些没有实际意义的分词被称为噪音,噪音多了搜索速度必然下降。Lucene其实自身是带有中文分词功能的,主要采用“单字切分”和“二分法”,但是由于它没有做到确定最小索引项,因此无法去除噪音,搜索效率大大降低。IK_Canalyzer中文分析器是第三方实现的分析器,继承自Lucene的Analyzer类。图4(a)和图4(b)分别为采用Lucene与IK_Canalyer分词的显示结果,可明显看出后者优于前者。

基于Lucene实现全文搜索引擎MYSearch的构建

全文索引引擎是名副其实的搜索引擎,国外代表有Google,国内知名的百度搜索。它们从互联网提取各个网站的信息(以网页文字为主),建立起数据库,并能检索与用户查询条件相匹配的记录,按一定的排列顺序返回结果。

MYSearch是基于Lucene设计实现的一个全文搜索引擎,本文给出了设计过程以及实验结果,并针对Lucene在中文分词方面的不足给出了解决办法。此外目前可以获得的Lucene开源代码中并没有对PDF、Word、Excel等常用的文本格式进行搜索。要想克服上述问题,就要对不同格式的文本进行解析,把解析出来的文字提取出纯文本,然后就像建立网页的索引一样,对提出来的文字建立索引,以便查询。这将是进一步需要改进MYSearch全文搜索引擎的工作重点。

根据搜索结果的不同,全文搜索引擎可分为两类:一类拥有自己的网页抓取、索引、检索系统(Indexer),有独立的“蜘蛛”(Spider)程序、或爬虫(Crawler)、或“机器人”(Robot)程序(这三种称法意义相同),能自建网页数据库,搜索结果直接从自身的数据库中调用,上面提到的Google和百度就属于此类;另一类则是租用其他搜索引擎的数据库,并按自定的格式排列搜索结果,如Lycos搜索引擎。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 路由器
    +关注

    关注

    22

    文章

    3706

    浏览量

    113529
  • 引擎
    +关注

    关注

    1

    文章

    360

    浏览量

    22529
  • 代码
    +关注

    关注

    30

    文章

    4744

    浏览量

    68343
收藏 人收藏

    评论

    相关推荐

    [分享]最强山寨版搜索引擎震惊世界-熊熊搜索

    日前,一款名为“熊熊搜索”(Bearsou.com)的搜索引擎引起了不少网友的关注,这个搜索引擎一眼看去和普通搜索引擎区别不大,但仔细一看,这款搜索
    发表于 11-22 18:58

    参加搜索引擎营销SEM培训的好处?

    1. 可以快速学习搜索引擎营销(SEM)投放策略、方法和技术,避免在自己摸索中浪费时间;2. 可以快速学习到搜索引擎营销(SEM)最新优化技术,在顶尖SEM优化公司指导下实实在在赚钱;3. 可以通过
    发表于 04-11 14:21

    基于网格技术的并行搜索引擎

    研究现有网格技术和搜索技术,分析并行搜索引擎的优点和不足,提出基于网格技术的并行搜索引擎解决方案,其中包含一个3 层结构的应用框架和一个并行搜索引擎的应用方案。
    发表于 03-30 10:09 23次下载

    维、哈、柯全文搜索引擎检索器的关键技术

    研究维、哈、柯全文搜索引擎检索器的关键问题,提出有效的解决方法,包括在用户计算机没有安装本地输入法和字库的情况下输入维、哈、柯文检索词并正常显示搜索结果,针对
    发表于 04-11 09:26 14次下载

    基于压缩后缀数组技术的搜索引擎

    目前,搜索引擎的核心模块(索引器)均采用倒排文件结构,对短语查询的准确率较低。该文引入后缀数组技术进行全文索引,为克服全文索引时占用空间大的缺点,研究了压缩后缀数
    发表于 04-22 09:57 25次下载

    教育网BBS搜索引擎设计与实现

    BBS 是教育网的一大特色,也是传统搜索引擎搜索的盲点,本文系统介绍了根据教育网BBS 的特点建立BBS 搜索引擎的关键技术和实现方法。关键词:搜索
    发表于 06-17 11:28 14次下载

    化工搜索引擎索引库的研究和实现

    本文在对Lucene 全文检索、索引开发包深入研究的基础上,设计了多索引索引方案,有效地减少了索引
    发表于 12-18 16:27 13次下载

    开放源代码的全文索引擎 Lucene

    开放源代码的全文索引擎 Lucene――介绍、系统结构与源码实现分析 第一节 全文检索系统与
    发表于 02-10 15:09 5次下载

    主题搜索引擎的研究

    介绍了将开源的全文检索工具包Lucene嵌入到自己的搜索引擎中来满足开发主题搜索引擎的需求。并基于Lucene中文分词的不足设计了一个比较完
    发表于 07-05 16:30 11次下载

    网络搜索引擎,网络搜索引擎的工作原理

    网络搜索引擎,网络搜索引擎的工作原理 21 世纪是信息时代,随着信息科学技术的不断发展,网络已成为人们生活中的重要组成部分,网上
    发表于 03-26 15:51 1439次阅读

    基于JAVA技术的搜索引擎的研究与实现

    本文还利用Java技术对搜索引擎的三个核心部分即网络蜘蛛、网页索引搜索进行了实现索引搜索
    发表于 05-07 14:14 35次下载
    基于JAVA技术的<b class='flag-5'>搜索引擎</b>的研究与<b class='flag-5'>实现</b>

    垂直搜索引擎是什么_垂直搜索引擎有哪些

    垂直搜索引擎是针对某一个行业的专业搜索引擎,是搜索引擎的细分和延伸,是对网页库中的某类专门的信息进行一次整合,定向分字段抽取出需要的数据进行处理后再以某种形式返回给用户。垂直搜索是相对
    发表于 01-04 17:19 7894次阅读

    介绍五个具有高级功能的搜索引擎

    数据库里存储的大量的信息对标准的搜索引擎来说是不可见的,标准的搜索引擎只是索引网站上的内容,从一个链接到另一个链接。 隐匿搜索引擎专门用来搜索
    的头像 发表于 04-04 09:13 7077次阅读

    苹果自研的搜索引擎干的过谷歌吗?

    据TNW报道,苹果正在加快研发自己的搜索引擎,以取代谷歌。推出自己的搜索引擎,将有利于苹果的产品服务的推广,同时削弱谷歌在搜索领域的垄断地位。
    的头像 发表于 12-22 14:54 1923次阅读

    NAS下搭建linux命令搜索引擎教程

    前面写到了程序专用的vscode,今天再来介绍一款程序佬专用的搜索引擎——Linux命令搜索引擎。该引擎专用于搜索Linux下的各种命令,毕竟人的记忆力是有限的,当你记不住某一个命令的
    的头像 发表于 02-24 11:33 1079次阅读
    NAS下搭建linux命令<b class='flag-5'>搜索引擎</b>教程