搜索引擎优化毕业论文( 开发一个搜索引擎的主要工作原理及解决办法(一))

优采云 发布时间: 2022-04-13 02:19

  搜索引擎优化毕业论文(

开发一个搜索引擎的主要工作原理及解决办法(一))

  

  0 前言

  随着互联网技术的飞速发展,互联网上的信息量也在不断增加。如何更有效地利用这些信息资源越来越受到人们的关注。互联网上的信息来源广泛,同时存在多种形式,包括图像、文字、视频、音频等多种形式。寻找我们需要的信息已经成为我们在使用互联网时面临的一个问题,因此开发一个搜索引擎是非常有必要的。目前成熟的搜索引擎如Lycos、雅虎、谷歌、百度等都有自己的优势。例如,谷歌可以比雅虎更快、更准确地搜索所需信息。百度中文搜索引擎支持网页信息检索、图片、Flash、音乐等。多媒体信息的检索等,以及本文中搜索引擎的开发,就是通过网络爬虫来抓取信息,然后通过一定的技术提取和处理网页信息,将抓取到的信息存储在索引数据库中,并利用一些查询接口。实现信息检索,帮助用户在海量信息中快速准确地找到用户真正感兴趣的信息。

  1 搜索引擎的设计

  1.1 搜索引擎结构设计

  搜索引擎是指按照一定的策略从互联网上采集信息,并使用特定的计算机程序,对信息进行组织和处理,为用户提供检索服务,并将用户检索到的相关信息展示给用户的系统。

  搜索引擎主要包括全文索引、目录索引、元搜索引擎、垂直搜索引擎、聚合搜索引擎、门户搜索引擎和免费链接列表。全文搜索引擎是目前广泛使用的主流搜索引擎。它可以为索引 文章 中的每个单词建立一个索引。当用户进行搜索时,搜索程序会根据预先建立的索引进行搜索,并将搜索结果反馈给用户。本文的主要工作是利用Java设计和实现一个Web全文搜索引擎。搜索引擎的结构设计如图1所示:

  

  .

  1.2 网络蜘蛛结构设计

  创建搜索引擎的第一步是设计一个程序来漫游海量的互联网信息和爬取网页。这个程序叫做网络蜘蛛,网络蜘蛛也叫自动搜索机器人。主要用于分析网页上的每一个超链接,并根据超链接链接到其他网页中的超链接。网络蜘蛛结构设计如图2所示: .

  

  1.3 索引器结构设计

  搜索引擎组织网络蜘蛛捕获的网页信息,这个过程称为“创建索引”。索引器结构设计如图3所示:

  

  1.4 猎犬结构设计

  搜索引擎始终接收来自大量用户的几乎同时的查询。它根据每个用户的要求检查自己的索引,并在很短的时间内找到用户需要的信息。检索器的结构设计如图4所示:

  

  2 网络蜘蛛的实现

  2.1 网络蜘蛛爬取策略实现算法

  互联网可以看作是一张超大的“图”。网络蜘蛛的网页遍历算法采用图的广度优先遍历(BFS)算法。实现爬取策略的算法如下:

  1)将入口 URL 排入要访问的 URL 队列。

  2)URL从待访问的URL队列中出列,使用开源的HTML解析库HTMLParser解析给定的入口URL,判断捕获的URL是否在访问的URL集合中。存储在要访问的 URL 队列中(入队),如果存在则不执行任何操作。

  3)使用HTMLParser解析出队的URL,解析出URL的标题、内容、关键词、创建时间等信息。

  4)使用 Lucene 索引 HTMLParser 解析的网页。

  5)将出队的 URL 添加到访问的 URL 集中。

  6)重复(2)~(5).

  2.2 web蜘蛛的具体实现

  (1)数据结构:队列和哈希表(hash tables)

  首先,构建一个 URL 队列,用于存储捕获的要访问的 URL。构建队列时需要考虑以下两个因素:

  1)队列中要存储的元素数量很大,无法确定;2)删除和添加通常在队列的头部和尾部执行。

  针对以上两点,使用java集合类LinkedList的链式存储结构来实现未访问的URL队列。这个未访问的URL队列主要用于存储爬虫抓取到的URL,通过一系列的dequeue和enqueue操作实现对网页的广度优先遍历。

  (2)构建哈希表。根据未访问的URL队列抓取解析URL时,还需要一个数据结构哈希表来存储访问过的URL,避免重复抓取同一个URL。获取解析。

  URL从unvisited queue中出队后,首先判断是否在这个数据结构中,如果不在visited URL set中,则只对URL进行其他操作。否则,该 URL 将被丢弃。这种数据结构需要具备以下两个特征:

  1) 结构中存储的 URL 不能重复。

  2)由于URL数量较多,考虑到搜索性能问题,要求这种结构能够快速搜索。

  针对以上两点,使用Java集合类HashSet来实现存储访问过的URL的哈希表集合类。

  这个访问过的 URL 集合主要记录了网络蜘蛛访问过的 URL。当网络蜘蛛访问一个从未访问过的 URL 队列时,首先判断该 URL 是否已经存在于被访问的 URL 集合中,并且不存在访问时,这样可以避免对同一个 URL 的多次不必要的访问。

  (3)网络蜘蛛抓取网页

  HTMLParser 是一个纯 java 编写的 html 解析库。不依赖其他java库文件,主要用于转换或提取html。它解析 html 的速度非常快而且没有错误。使用 HTMLParser 的 HTML 链接提取功能提取网页中的链接的过程如下:

  1)创建过滤器来过滤a标签中的URL:NodeFilter filter = new TagNameFilter("a");2)创建解析器:Parser parser = new Parser();3)使用parser.setURL(url) 和 setEncoding() 设置要解析的 URL 和编码方式;4)获取解析结果:NodeList list = parser.extractAllNodesThatMatch(filter);5)遍历解析结果;6)在将解析后的URL存入未访问的URL队列之前,需要进行检查,过滤掉一些错误链接或不可达链接。

  3 索引器的实现

  使用Lucene创建索引,Lucene是一个开源的全文搜索引擎工具包[6-8],即不是一个完整的全文搜索引擎,而是一个全文搜索引擎架构,提供完整的查询引擎和索引引擎。Lucene 提供了五个用于索引文档的基本类。以下是使用 Lucene 为 HtmlDoc 实例创建索引的相关操作。

  1)创建分词器,这里使用Lucene默认的分词器;2)设置IndexWriter类的相关配置:

  3)设置索引的保存路径:

  4)创建 Lucene 索引器:IndexWriter writer = newIndexWriter(dir, iwc);5)创建 Document 对象:Document doc = new Docu-ment();6)将 HTMLField 字段添加到 Document 对象; 7) 将文档添加到索引器:

  writer.addDocument(doc);8)关闭索引器:writer.close();4 检索器的实现。

  4.1 使用 Lucene 检索

  1)创建IndexReader对象,读取indexer创建的索引;2)创建一个tokenizer Analyzer,对用户输入的字符串进行分段;3)使用IndexReader对象创建检索器IndexSearcher;4)使用tokenizer Analyzer创建QueryParser对象,解析用户输入的搜索字符串;5)获取解析搜索字符串返回的Query对象;6)使用Query对象进行搜索,将默认排序结果放入TopDocs结果集中;7)获取搜索结果的总数:hitsSize = results.totalHits;。

  4.2 突出显示搜索结果

  1)设置高亮html标签2)创建高亮对象:Highlighter highlighter = newHighlighter(formatter, scorer);3)设置高亮附近的字符串大小:Fragmenterfragmenter=new SimpleFragmenter( 200);4)设置高亮:highlighter.setTextFragmenter(fragmenter);5 检索测试。

  用户可以在搜索器的文本框中输入想要的关键词,点击搜索按钮,搜索器会自动显示与关键词相关的搜索结果,搜索“上海车展”返回搜索结果。. 如图 5 所示: .

  

  6 总结

  搜索引擎是一种信息检索服务系统,可以帮助用户在互联网上快速找到有用的信息。通过网络爬虫抓取信息,然后通过一定的技术提取和处理网页信息,将抓取的信息存储在索引数据库中,通过一些查询接口实现信息检索。该搜索引擎的设计和实现基于全文搜索。设计了网络爬虫、索引器和搜索器的结构,用Java语言实现了搜索引擎。通过检索实验,提高了检索速度。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线