全文搜索引擎的设计与实现毕业论文.doc_第1页
全文搜索引擎的设计与实现毕业论文.doc_第2页
全文搜索引擎的设计与实现毕业论文.doc_第3页
全文搜索引擎的设计与实现毕业论文.doc_第4页
全文搜索引擎的设计与实现毕业论文.doc_第5页
已阅读5页,还剩60页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

江汉大学本科毕业论文 设计 I 全文搜索引擎的设计与实现毕业论文全文搜索引擎的设计与实现毕业论文 目录 1 1 绪论绪论 1 1 1 1 课题背景及介绍 1 1 2 课题研究目的及应用 1 1 3 课题研究范围 1 1 4 小结 2 2 2 搜索引擎相关理论研究搜索引擎相关理论研究 3 3 2 1 WEB搜索引擎原理和结构 3 2 1 1 搜索引擎三段式工作流程 3 2 1 2 搜索引擎整体结构 4 2 2 网页收集 5 2 1 2 爬虫的工作流程 5 2 1 3 爬虫的抓取策略 5 2 1 4 链接数据库的建立 6 2 1 5 链接数据库的更新 6 2 3 网页预处理 6 2 3 1 建立索引页面库 7 2 3 2 分词 9 2 3 3 倒排索引 10 2 4 查询服务 12 2 4 1 查询方式和匹配 12 2 4 2 结果排序 13 2 4 3 文档摘要 14 2 5 小结 15 3 3 NUTCHNUTCH 相关框架研究相关框架研究 1616 3 1 LUCENE研究 16 3 1 1 Lucene 概述 16 3 1 2 Lucene 如何对索引进行搜索 16 3 1 3 Lucene 增删改索引的 API 17 3 2 NUTCH研究 21 3 2 1 Nutch 概述 21 3 2 2 研究 Nutch 的原因 21 3 2 3 研究 Nutch 的目标 22 3 2 4 Nutch 和 Lucene 比较 22 3 2 5 Nutch 常用命令 22 3 3 SOLR研究 28 3 3 1 Solr 概述 28 江汉大学本科毕业论文 设计 II 3 3 2 Solr 索引 28 3 3 3 Solr 搜索 29 3 3 4 Lucene 索引查看工具 Luke 31 3 4 HADOOP研究 32 3 4 1 Hadoop 概述 32 3 4 2 Hadoop 单机本地模式 34 3 4 3 Hadoop 单机伪分布式模式 34 3 5 小结 36 4 4 全文搜索引擎系统分析与技术选型全文搜索引擎系统分析与技术选型 3737 4 1 系统目标需求 37 4 2 系统功能项 37 4 3 可行性分析与决策 37 4 3 1 技术可行性 38 4 3 2 经济可行性 38 4 4 小结 39 5 5 全文搜索引擎系统设计与实现全文搜索引擎系统设计与实现 4040 5 1 系统功能图 40 5 2 系统实体设计 40 5 2 1 实体 40 5 2 2 实体的属性 41 5 2 3 实体间的联系 42 5 3 系统实现 42 5 3 1 系统需要的环境 42 5 3 2 系统中 Nutch 的配置 43 5 3 3 对整个网络进行抓取 44 5 3 4 Solr 安装配置和使用 47 5 3 5 给 Solr 4 2 添加 mmseg4j 48 5 3 6 客户端应用程序的实现 49 5 4 小结 56 6 6 全文搜索引擎系统评价全文搜索引擎系统评价 5757 6 1 系统特色 57 6 2 系统存在的不足和解决方案 57 6 2 1 系统存在的不足 57 6 2 2 改进措施 58 6 2 3 毕业设计心得与收获 58 7 7 结束语结束语 5959 致谢致谢 6060 参考文献参考文献 6161 江汉大学本科毕业论文 设计 1 1 绪论 1 1 课题背景及介绍 随着互联网的快速发展 越来越丰富的信息呈现在用户面前 但同时伴随的问题 是用户越来越难以获得其最需要的信息 为了解决此问题 出现了网络搜索引擎 网 络搜索引擎中以基于 WWW 的搜索引擎应用范围最为广泛 网络搜索引擎是指对 WWW 站 点资源和其它资源进行索引和检索的一类检索机制 全文搜索引擎是目前最为普及的 应用 通过从互联网上提取各个网站的信息 以网页文字为主 建立数据库 用户查询 的时候便在数据库中检索与用户查询条件相匹配的记录 最终将匹配的那些记录 按 一定的排列顺序显示给用户 国外具代表性的全文检索搜索引擎有 Google Yahoo Bing 等 国内著名的有百度 中搜等 目前网络中的资源非常丰富 但是如何有效的搜索信息却是一件困难的事情 建 立搜索引擎就是解决这个问题的最好方法之一 该课题要求设计一个 Web 应用程序 学习搜索引擎的基本原理和设计方法 应用开源的全文搜索引擎 Lucene 框架和 Lucene 的子项目 Nutch 实现一个全文搜索引擎 1 2 课题研究目的及应用 针对搜索引擎广阔的应用前景以及分析国内外搜索引擎的发展现状 根据搜索 引擎系统的工作原理设计一种基于 Internet 的全文搜索引擎模型 它从互联网上获取 网页 建立索引数据库 并采用数据库管理作业和多线程技术以提高全文搜索的性能 和效率 从技术上可以适用于任何有全文搜索需求的应用 1 3 课题研究范围 一般来说搜索引擎都由 用户接口 搜索器 索引生成器和查询处理器 4 个部分 组成 用户接口的作用是输入用户查询 显示查询结果 提供用户相关性反馈机制 主 要的目的是方便用户使用搜索引擎 高效率 多方式地从搜索引擎中得到有效 及时 的信息 用户接口的设计和实现使用人机交互的理论和方法 以充分适应人类的思维 习惯 江汉大学本科毕业论文 设计 2 搜索器用于 WWW 的遍历和网页的下载 从一个起始 URL 集合开始 顺着这些 URL 中的超链 Hyperlink 以宽度优先 深度优先或启发式方式循环地在互联网中发现信 息 索引生成器对搜索器收集到的网页和相关的描述信息经索引组织后存储在索引库 中 查询处理器的功能是根据用户的查询在索引库中快速检出文档 进行文档与查询 的相关度评价 对将要输出的结果进行排序 并实现某种用户相关性反馈机制 1 4 小结 本章内容主要介绍了课题背景 课题目的 及课题的研究方法与内容这些方面 阐述了搜索引擎在显示应用中的重要性 目前全文搜索引擎的工作组成部分以及各个 工作组成部分到底是什么 下面将具体介绍全文搜索引擎的相关理论 使读者全文搜 索引擎的基本技术有所了解 为后续章节的阅读打下基础 江汉大学本科毕业论文 设计 3 2 搜索引擎相关理论研究 2 1 Web搜索引擎原理和结构 全文搜索引擎是一款网络应用软件系统 论文中全部以搜索引擎称 最基本的搜 索引擎应该包含三个模块 网页搜集 预处理 查询服务 事实上 这三个部分是相 互独立 分别工作的 主要的关系体现在前一部分得到的数据结果为后一部分提供原 始数据 2 1 1 搜索引擎三段式工作流程 三者的关系如图 2 1 图 2 1 搜索引擎三段式工作流程 在介绍搜索引擎的整体结构之前 现在借鉴 计算机网络 自顶向下的方法描 述因特网特色 一书的叙事方法 从普通用户使用搜索引擎的角度来介绍搜索引擎的 具体工作流程 自顶向下的方法描述搜索引擎执行过程 1 用户通过浏览器提交查询的词或者短语 P 搜索引擎根据用户的查询返回匹配 的网页信息列表 L 2 上述过程涉及到两个问题 如何匹配用户的查询以及网页信息列表从何而来 根据什么而排序 用户的查询 P 经过分词器被切割成小词组 并被剔 除停用词 的 了 啊等字 根据系统维护的一个倒排索引可以查询某个词 pi 在 哪些网页中出现过 匹配那些 都出现的网页集即可作为初始结果 更 进一步 返回的初始网页集通过计算与查询词的相关度从而得到网页排名 即 Page 江汉大学本科毕业论文 设计 4 Rank 按照网页的排名顺序即可得到最终的网页列表 3 假设分词器和网页排名的计算公式都是既定的 那么倒排索引以及原始网页集 从何而来 原始网页集在之前的数据流程的介绍中 可以得知是由爬虫 spider 爬取 网页并且保存在本地的 而倒排索引 即词组到网页的映射表是建立在正排索引的基 础上的 后者是分析了网页的内容并对其内容进行分词后 得到的网页到词组的映射 表 将正排索引倒置即可得到倒排索引 4 网页的分析具体做什么呢 由于爬虫收集来的原始网页中包含很多信息 比如 html 表单以及一些垃圾信息比如广告 网页分析去除这些信息 并抽取其中的正文信 息作为后续的基础数据 2 1 2 搜索引擎整体结构 图 2 2 搜索引擎整体结构 爬虫从 Internet 中爬取众多的网页作为原始网页库存储于本地 然后网页分析 器抽取网页中的主题内容交给分词器进行分词 得到的结果用索引器建立正排和倒排 索引 这样就得到了索引数据库 用户查询时 在通过分词器切割输入的查询词组并 通过检索器在索引数据库中进行查询 得到的结果返回给用户 江汉大学本科毕业论文 设计 5 无论搜索引擎的规模大小 其主要结构都是由这几部分构成的 并没有大的差别 搜索引擎的好坏主要是决定于各部分的内部实现 有了上述的对与搜索引擎的整体了解 下面对搜索引擎的各个模块进行说明 2 2 网页收集 全文检索是工作在某个数据集合上的程序 他需要事先由页面抓取程序 在全网 中抓取海量网页 这个抓取程序也叫网络爬虫或 Spider 只有事先抓取了足够多的网 页数据 并处理之 才能对大量的用户查询提供及时的响应 2 1 2 爬虫的工作流程 网页收集的过程如同图的遍历 其中网页就作为图中的节点 而网页中的超链接 则作为图中的边 通过某网页的超链接 得到其他网页的地址 从而可以进一步的进行 网页收集 图的遍历分为广度优先和深度优先两种方法 网页的收集过程也是如此 综上 Spider 收集网页的过程如下 从初始 URL 集合获得目标网页地址 通过网络 连接接收网页数据 将获得的网页数据添加到网页库中并且分析该网页中的其他 URL 链接 放入未访问 URL 集合中用于网页收集 下图表示了这个过程 图 2 3 Spider 工作流程 2 1 3 爬虫的抓取策略 爬虫的工作策略一般分为累积式抓取 cumulative crawling 和增量式抓取 incremental crawing 两种 江汉大学本科毕业论文 设计 6 累积式抓取是指从某一个时间点开始 通过遍历的方式抓取系统所能允许存储和 处理的所有网页 在理想的软硬件环境下 经过足够的运行时间 积累是抓取策略可 以保证抓取到相当规模的网页集合 但由于 Web 数据的动态特性 集合中的网页的抓 取时间点是不同的 页面被更新的情况也不同 因此累积式抓取到的网页集合事实上 并无法与真实环境中的网络数据保持一致 与累积式抓取不同 增量式抓取是指在具有一定量规模的网页集合的基础上 采 用更新数据的方式选取已有集合中的过时页面进行抓取 以保证所抓取的数据与真实 网络数据足够接近 进行增量式抓取的前提是 系统已经抓取了足够数量的网络页面 并具有这项页面被抓取的时间信息 面对实际应用环境的网络蜘蛛设计中 通常既包含累积式抓取 也包括增量式抓 取的策略 累积式抓取一般用户数据集合的整体建立或大规模更新阶段 而增量式抓 取则主要针对数据集合的日常维护和及时更新 2 1 4 链接数据库的建立 初始 URL 的建立有两种方式 超链接和站长提交 超链接 爬虫会根据种子地址 可能是最先提交给爬虫的 URL 集合 抓取页面 站长提交 在实际运行中 爬虫不可能抓取所有的站点 为此 网站站长可以向 搜索引擎进行提交 要求收录 搜索引擎经过核查后 便将该网站加入到 URL 集合中 进行抓取 2 1 5 链接数据库的更新 链接的注入 抓取程序会根据预先提供的 URL 集合进行标准化 根据设定的正则 检验来过滤 URL 将这些符合标准的 URL 放入到 map 中 并在构造 map 过程中给 URL 初 始化得分 分数可以影响 URL 对应主机的搜索排序和采集优先级 接着会判断 URL 在 抓取数据库中是否存在 如果存在 删除旧的 更新新的 如果不存在 将该 URL 的 状态标记为未采集过 URL 生成器 从抓取回来的网页中 将符合条件的 URL 提出出来 检测 URL 是否在 有效更新时间里面 并将 URL 载入相应的任务组 计算 URL 的 hash 值 搜集 URL 直 至达到规定的广度 江汉大学本科毕业论文 设计 7 2 3 网页预处理 网页预处理的主要目标是将原始网页通过一步步的数据处理变成可方便搜索的数 据形式 预处理模块的整体结构如下 图 2 4 预处理模块的整体结构 通过爬虫的收集 保存下来的网页信息具有较好的信息存储格式 但是还是有一 个缺点 就是不能按照网页 URL 直接定位到所指向的网页 所以 需要先建立网页的 索引 如此通过索引 这样可以很方便的从原始网页库中获得某个 URL 对应的页面信 息 之后 处理网页数据 对于一个网页 首先需要提取其网页正文信息 其次对正 文信息进行分词 之后再根据分词的情况建立索引和倒排索引 这样 网页的预处理 也全部完成 2 3 1 建立索引页面库 索引的主要过程 江汉大学本科毕业论文 设计 8 图 2 5 索引的主要过程 索引过程可分为三个主要的操作阶段 将数据转换成文本 分析文本 将分析过的文本保存到数据库中 转换成文本 在索引数据之前 首先必须将数据转换成纯文本字符流 但是 在 现实世界中 信息多以富媒体文档格式呈现 PDF WORD EXCEL HTML XML 等 为此需要 使用文档解析器 将富媒体转换成纯文字字符流 分析文本 在对数据进行索引钱 还必须进行预处理 对数据进行分析是之更加 适合被索引 分析数据时 现将文本数据切分成一些大块或者词汇单元 然后对它们 执行一些可选的操作 例如 在索引之前将这些词汇单元转换成小写 使得搜索对大 小写不敏感 具有代表性的是要从输入中去掉一些使用很频繁但却没有实际意义的词 比如英文文本中的一些停用词 a an the in on 等 同样的 也需要分析输入 的词汇单元 一遍从词语中去掉一些不必要的字母以找到他们的词干 这一处理过程 称为分析 将分析后的数据写入索引 对输入数据分析处理完成后 就可以将结果写 入索引文件中 结果一般包括网页标题 正文 所属住地址 主机 内容摘要 时间 戳 当前 URL 地址等 并更具具体需要建立索引和存储 江汉大学本科毕业论文 设计 9 2 3 2 分词 中文分词是指将一个汉字序列切分成一个一个单独的词 从而达到计算机可以自 动识别的效果 中文分词主要有三种方法 第一种基于字符串匹配 第二种基于语义 理解 第三种基于统计 由于第二和第三种的实现需要大量的数据来支持 一般采用 的是基于字符串匹配的方法 基于字符串匹配的方法又叫做机械分词方法 它是按照一定的策略将待分析的汉 字串与一个 充分大的 机器词典中的词条进行配 若在词典中找到某个字符串 则 匹配成功 识别出一个词 按照扫描方向的不同 串匹配分词方法可以分为正向匹 配和逆向匹配 按照不同长度优先匹配的情况 可以分为最大 最长 匹配和最小 最短 匹配 常用的几种机械分词方法如下 正向减字最大匹配法 由左到右的方向 逆向减字最大匹配法 由右到左的方向 最少切分 使每一句中切出的词数最小 双向最大减字匹配法 进行由左到右 由右到左两次扫描 采用其中的正向最大匹配法 算法描述如下 输入值为一个中文语句 S 以及最 大匹配词 n 取 S 中前 n 个字 根据词典对其进行匹配 若匹配成功 转 3 否则转 2 n n 1 如果 n 为 1 转 3 否则转 1 将 S 中的前 n 个字作为分词结果的一部分 S 除去前 n 个字 若 S 为空 转 4 否则 转 1 算法结束 需要说明的是 在第三步的起始 n 如果不为 1 则意味着有匹配到的词 而如 果 n 为 1 默认 1 个字是应该进入分词结果的 所以第三步可以将前 n 个字作为一 个词而分割开来 还有需要注意的是对于停用词的过滤 停用词即汉语中 的 了 和 么 等字词 在搜索引擎中是忽略的 所以对于分词后的结果 需要在用停用词 列表进行一下停用词过滤 您也许有疑问 如何获得分词字典或者是停用词字典 停用词字典比较好办 由 于中文停用词数量有限 可以从网上获得停用词列表 从而自己建一个停用词字典 然而对于分词字典 虽然网上有许多知名的汉字分词软件 但是很少有分词的字典提 供 在程序使用过程中 分词字典可以放入一个集合中 这样就可以比较方便的进行 比对工作 江汉大学本科毕业论文 设计 10 分词的结果对于搜索的精准性有着至关重要的影响 好的分词策略经常是由若干 个简单算法拼接而成的 所以您也可以试着实现双向最大减字匹配法来提高分词的准 确率 而如果遇到歧义词组 可以通过字典中附带的词频来决定哪种分词的结果更好 2 3 3 倒排索引 倒排索引 英语 Inverted index 也常被称为反向索引 置入档案或反向档 案 是一种索引方法 被用来存储在全文搜索下某个单词在一个文档或者一组文档中 的存储位置的映射 它是文档索引系统中最常用的数据结构 有两种不同的反向索引形式 一条记录的水平反向索引 或者反向档案索引 包含每个引用单词的文档的列表 一个单词的水平反向索引 或者完全反向索引 又包含每个单词在一个文档中的 位置 后者的形式提供了更多的兼容性 比如短语搜索 但是需要更多的时间和空间 来创建 下面将以图示和实例的方式分别说明正向索引和倒排索引 图 2 6 正向索引 江汉大学本科毕业论文 设计 11 图 2 7 倒排索引 以英文为例 下面是要被索引的文本 it is what it is what is it it is a banana 这样就能得到下面的反向文件索引 a 2 banana 2 is 0 1 2 it 0 1 2 what 0 1 检索的条件 what is 和 it 将对应这个集合 对相同的文字 得到后面这些完全反向索引 有文档数量和当前查询的单词结果 组成的的成对数据 同样 文档数量和当前查询的单词结果都从零开始 所以 banana 2 3 就是说 banana 在第三个文档里 而且在第三个文档的位 置是第四个单词 地址为 3 a 2 2 banana 2 3 is 0 1 0 4 1 1 2 1 江汉大学本科毕业论文 设计 12 it 0 0 0 3 1 2 2 0 what 0 2 1 0 如果执行短语搜索 what is it 将得到这个短语的全部单词各自的结果所在文档 为文档 0 和文档 1 但是这个短语检索的连续的条件仅仅在文档 1 得到 2 4 查询服务 查询服务的整体结构如下 图 2 8 查询服务的整体结构 在网页预处理后 每个元素至少包含如下几个方面 原始网页文档 URL 和标题 编号 所含的重要关键词的集合 以及他们在文档中出现的位置信息 其他一些指标 例如重要程度 分类代码等 而系统关键词总体的集合和文档的编号一起构成了一个倒排文件结构 使得一旦 得到一个关键词输入 系统能迅速给出相关文档编号的集合输出 2 4 1 查询方式和匹配 查询方式指的是系统允许用户提交查询的形式 考虑到各种用户的不同背景和不 江汉大学本科毕业论文 设计 13 同的信息需求不可能有一种普适的方式 一般认为 对于普通网络用户来说 最自然的方式就是 要什么就输入什么 但这是一种相当模糊的说法 例如用户输入 江汉大学 可能是他想了解江汉大学目前的招生状况 可能需 要找到江汉大学教务系统的网址 可能需要了解大家对江汉大学的评价 这是三种相 当不同的需求 在其他一些情况下 用户可能关心的是间接的信息 例如 江汉大学 录取分数线 450 分应该是他需要的 但不可能包含在这个短语中 尽管如此 用一 个次或短语来间接表达信息需求 希望网页中含有该词或该短语中的词 依然是主流 的搜索引擎查询模式 这不仅是因为他的确代表了大多数的情况 还因为它比较容易 实现 这样 一般来讲 系统面对的是查询短语 一般地 用 q0 表示用户提交的原始 查询 例如 q0 网络与分布式系统实验室 它首先需要被 切词 segment 或称 分词 即把它分成一个词的序列 如上例 则为 网络 与 分布式 系统 实 验室 注意 不同的分词软件可能得出不同的结果 然后需要删除那些没有查询 意义或者几乎在每篇文档中都会出现的词 例如 的 在本例中即为 与 最 后形成一个用于参加匹配的查询词表 q t1 t2 tm 在本例中就是 q 网 络 分布式 系统 实验室 倒排文件就是用词来作为索引的一个数据结构 显然 q 中的词必须是包含在倒排文件词表中才有意义 有了这样的 q 它的每一个元素都对 应倒排文件中的一个倒排表 文档编号的集合 记作 L ti 它们的交集即为对应查 询的结果文档集合 从而实现了查询和文档的匹配 上述过程的基本假设是 用户是 希望网页包含所输入查询文字的 2 4 2 结果排序 就目前的技术情况看 列表是最常见的形式 但人们也在探求新的形式 如 Vivisimo 引擎将结果页面以类别的形式呈现 给定一个查询结果集合 R r1 r2 rn 所谓列表 就是按照某种评价方式 确定出 R 中元素的一个顺序 让这些元 素以这种顺序呈现出来 笼统地讲 ri 和 q 的相关性 relevance 是形成这种顺序的 基本因素 但是 有效地定义相关性本身是很困难的 从原理上讲它不仅和查询词有 关 而且还和用户的背景 以及用户的查询历史有关 不同需求的用户可能输入同一 个查询 同一个用户在不同的时间输入的相同的查询可能是针对不同的信息需求 为 了形成一个合适的顺序 在搜索引擎出现的早期人们采用了传统信息检索领域很成熟 江汉大学本科毕业论文 设计 14 的基于词汇出现频度的方法 大致上讲就是一篇文档中包含的查询 q 中的那些词越 多 则该文档就应该排在越前面 再精细一些的考虑则是若一个词在越多的文档中有 出现 则该词用于区分文档相关性的作用就越小 这样一种思路不仅有一定直觉上的 道理 而且在倒排文件数据结构上很容易实现 因为 当通过前述关键词的提取过程 形成一篇文档的关键词集合 p t1 t2 tn 的时候 很容易同时得到每一个 ti 在该文档中出现的次数 即词频 而倒排文件中每个倒排表的长度则对应着一个词 所涉及的文档的篇数 即文档频率 然而 由于网页编写的自发性 随意性较强 仅 仅针对词的出现来决定文档的顺序 在 Web 上做信息检索表现出明显的缺点 需要有 其他技术的补充 这方面最重要的成果就是前面提到过的 PageRank 通过在预处理阶 段为每篇网页形成一个独立于查询词 也就和网页内容无关 的重要性指标 将它和 查询过程中形成的相关性指标结合形成一个最终的排序 是目前搜索引擎给出查询结 果排序的主要方法 2 4 3 文档摘要 搜索引擎给出的结果是一个有序的条目列表 每一个条目有三个基本的元素 标 题 网址和摘要 其中的摘要需要从网页正文中生成 一般来讲 从一篇文字中生成 一个恰当的摘要是自然语言理解领域的一个重要课题 人们已经做了多年的工作并取 得了一些成果 但相关的技术用到网络搜索引擎来有两个基本困难 一是网页的写作 通常不规范 文字比较随意 因此从语言理解的角度难以做好 二是复杂的语言理解 算法耗时太多 不适应搜索引擎要高效处理海量网页信息的需求 据统计 即使是分 词这一项工作 文本理解的基础 在高档微机上每秒钟也只能完成 10 篇左右网页的 处理 因此搜索引擎在生成摘要时要简便许多 基本上可以归纳为两种方式 一是静 态方式 即独立于查询 按照某种规则 事先在预处理阶段从网页内容提取出一些文 字 例如截取网页正文的开头 512 个字节 对应 256 个汉字 或者将每一个段落的 第一个句子拼起来 等等 这样形成的摘要存放在查询子系统中 一旦相关文档被选 中与查询项匹配 就读出返回给用户 显然 这种方式对查询子系统来说是最轻松的 不需要做另外的处理工作 但这种方式的一个最大的缺点是摘要和查询无关 一篇网 页有可能是多个不同查询的结果 当用户输入某个查询 他一般是希望摘要中能够突 出显示和查询直接对应的文字 希望摘要中出现和他关心的文字相关的句子 因此 有了 动态摘要 方式 即在响应查询的时候 根据查询词在文档中的位置 提取出 江汉大学本科毕业论文 设计 15 周围的文字来 在显示时将查询词标亮 这是目前大多数搜索引擎采用的方式 为了 保证查询的效率 需要在预处理阶段分词的时候记住每个关键词在文档中出现的位置 2 5 小结 本章主要介绍了搜索引擎的相关理论 以 web 搜索引擎为主要介绍对象 首先 从 Web 搜索引擎原理和结构介绍 阐述了搜索引擎三段式的工作原理 以及给出了目 前主流搜索引擎实现的整体结构描述 其次分别用三个章节分别介绍三段式工作流程 中涉及到的各个流程的主要工作 以及工作中所采用什么样的工作策略 江汉大学本科毕业论文 设计 16 3 Nutch 相关框架研究 3 1 Lucene 研究 3 1 1 Lucene 概述 Lucene 是一套用于全文检索和搜寻的开放源码程序库 由 Apache 软件基金会支持 和提供的 高效的 基于 Java 的全文检索库 它并不是一个完整的应用程序 而是一 组代码库 并提供了方便实现搜索引擎的 API Lucene 是一个高效的基于 Java 的全文检索库 所以在了解 Lucene 之前要了解 一下全文检索 那么什么叫做全文检索呢 生活中的数据总体分为两种 结构化数 据和非结构化数据 3 1 2 Lucene 如何对索引进行搜索 第一步 用户输入查询语句 查询语句同我们普通的语言一样 也是有一定语法的 不同的查询语句有不同的 语法 如 SQL 语句就有一定的语法 查询语句的语法根据全文搜索引擎的实现而不同 最基本的有比如 AND OR NOT 等 举个例子 用户输入语句 lucene AND learned NOT hadoop 说明用户想找一 个包含 lucene 和 learned 然而不包括 hadoop 的文档 第二步 对查询语句进行词法分析 语法分析 及语言处理 由于查询语句有语法 因而也要进行语法分析 语法分析及语言处理 1 词法分析主要用来识别单词和关键字 如果在词法分析中发现不合法的关键 字 则会出现错误 2 语法分析主要是根据查询语句的语法规则来形成一棵语 如果发现查询语句不满足语法规则 则会报错 3 语言处理同索引过程中的语言处理几乎相同 经过第二步 得到一棵经过语言处理的语法树 第三步 搜索索引 得到符合语法树的文档 第四步 根据得到的文档和查询语句的相关性 对结果进行排序 江汉大学本科毕业论文 设计 17 3 1 3 Lucene 增删改索引的 API Lucene 可对 email 网页 文本资料 doc pdf 之类的文档进行索引建立 在建立索引 的时候可为以后的排序做些处理 表 4 1 给出了通过内存建立文本信息索引的一个例 子 表 4 1 建立索引 public class IndexUtil private String ids 1 2 3 4 5 6 private String emails aa ss88817 420418858 496008642 ss88817 ss8817 fight private String contents wel com to sina aa how are you ss88817 are you ok 496008642 what are you doing 496008642 Have a good night ss88817 good morning ss88817 private int attachs 2 3 1 4 5 3 private String names tom lily john jack mike bob private Directory directory null private IndexWriterConfig iwc null public IndexUtil try directory FSDirectory open new File D bs lucenetestdir01 directory new RAMDirectory catch Exception e e printStackTrace public void index IndexWriter writer null try iwc new IndexWriterConfig Version LUCENE 36 new StandardAnalyzer Version LUCENE 36 writer new IndexWriter directory iwc Document doc null for int i 0 i ids length i 江汉大学本科毕业论文 设计 18 doc new Document doc add new Field id ids i Field Store YES Field Index NOT ANALYZED NO NORMS doc add new Field email emails i Field Store YES Field Index NOT ANALYZED doc add new Field content contents i Field Store NO Field Index ANALYZED doc add new Field name names i Field Store YES Field Index NOT ANALYZED NO NORMS writer addDocument doc System out println Index Create OK catch Exception e e printStackTrace finally try writer close catch Exception e e printStackTrace System out println Index Writer Close Error Lucene 查询服务是根据通过的关键字 从已建立的索引中查询符合分词规则的信 息 表 3 2 给出了通过检索索引的一个例子 表 3 2 查询服务 public void query IndexReader reader null try reader IndexReader open directory 通过reader可以获取有效的文档数量 reader max System out println numDocs reader numDocs System out println maxDoc reader maxDoc catch Exception e e printStackTrace finally try reader close catch IOException e e printStackTrace 江汉大学本科毕业论文 设计 19 System out println Index Reader Close Error Lucene 索引更新是根据提供的新信息 删除 回复 修改索引的过程 表 3 3 表 3 4 给出了删除 恢复 强制删除索引的一个例子 表 3 3 删除 恢复 强制删除索引 public void delete IndexWriter writer null try iwc new IndexWriterConfig Version LUCENE 36 new StandardAnalyzer Version LUCENE 36 writer new IndexWriter directory iwc writer deleteDocuments new Term id 1 System out println Index where id 1 delete ok catch Exception e e printStackTrace finally if writer null try writer close catch Exception e e printStackTrace System out println Index Writer Close Error public void unewdelete IndexReader reader null try reader IndexReader open directory false reader undeleteAll 恢复所有索引 System out println All Index Undelte Ok catch Exception e e printStackTrace finally try reader close catch IOException e 江汉大学本科毕业论文 设计 20 e printStackTrace System out println Index Reader Close Error public void forceDelete IndexWriter writer null try iwc new IndexWriterConfig Version LUCENE 36 new StandardAnalyzer Version LUCENE 36 writer new IndexWriter directory iwc writer forceMergeDeletes System out println Index where id 1 delete ok catch Exception e e printStackTrace finally if writer null try writer close catch Exception e e printStackTrace System out println Index Writer Close Error 表 3 4 强制合并索引 public void forceMerge IndexWriter writer null try iwc new IndexWriterConfig Version LUCENE 36 new StandardAnalyzer Version LUCENE 36 writer new IndexWriter directory iwc 会将索引合并为3段 这3段中被删除的数据会被清空 特别注意 此处Lucene在3 5以后不建议使用 因为会消耗大量的开销 Lucene会自 动优化 writer forceMerge 3 System out println Index where id 1 delete ok catch Exception e e printStackTrace finally 江汉大学本科毕业论文 设计 21 if writer null try writer close catch Exception e e printStackTrace System out println Index Writer Close Error 3 2 Nutch 研究 3 2 1 Nutch 概述 Apache Nutch 是一个用 Java 编写的开源网络爬虫 通过它 就能够自动地找到网 页中的超链接 从而极大地减轻了维护工作的负担 例如检查那些已经断开了的链接 或是对所有已经访问过的网页创建一个副本以便用于搜索 接下来就是 Apache Solr 所要做的 Solr 是一个开源的全文搜索框架 通过 Solr 能够搜索 Nutch 已经访问过的 网页 Apache Nutch 对于 Solr 已经支持得很好 这大大简化了 Nutch 与 Solr 的整合 这也消除了过去依赖于 Apache Tomcat 来运行老的 Nutch 网络应用以及依赖于 Apache Lucene 来进行索引的麻烦 3 2 2 研究 Nutch 的原因 可能有的朋友会有疑问 已经有 google 有百度 为何还需要建立自己的搜索引擎呢 这里我列出 3 点原因 1 透明度 nutch 是开放源代码的 因此任何人都可以查看他的排序算法是如何 工作的 商业的搜索引擎排序算法都是保密的 无法知道为什么搜索出来的排序结果 是如何算出来的 更进一步 一些搜索引擎允许竞价排名 比如百度 这样的索引结 果并不是和站点内容相关的 因此 nutch 对学术搜索和政府类站点的搜索来说 是个 好选择 因为一个公平的排序结果是非常重要的 2 对搜索引擎的理解 我们并没有 google 的源代码 因此学习搜索引擎 Nutch 是个不错的选择 了解一个大型分布式的搜索引擎如何工作是一件让人很受益的事情 在写 Nutch 的过程中 从学院派和工业派借鉴了很多知识 比如 Nutch 的核心部分目 江汉大学本科毕业论文 设计 22 前已经被重新用 Map Reduce 实现了 Map Reduce 是一个分布式的处理模型 最先是 从 Google 实验室提出来的 并且 Nutch 也吸引了很多研究者 他们非常乐于尝试新 的搜索算法 因为对 Nutch 来说 这是非常容易实现扩展的 3 扩展性 你是不是不喜欢其他的搜索引擎展现结果的方式呢 那就用 Nutch 写你自己的搜索引擎吧 Nutch 是非常灵活的 他可以被很好的客户订制并集成到你 的应用程序中 使用 Nutch 的插件机制 Nutch 可以作为一个搜索不同信息载体的搜 索平台 当然 最简单的就是集成 Nutch 到你的站点 为你的用户提供搜索服务 3 2 3 研究 Nutch 的目标 nutch 致力于让每个人能很容易 同时花费很少就可以配置世界一流的 Web 搜索引 擎 为了完成这一宏伟的目标 nutch 必须能够做到 每个月取几十亿网页 为这些网页维护一个索引 对索引文件进行每秒上千次的搜索 提供高质量的搜索结果 以最小的成本运作 3 2 4 Nutch 和 Lucene 比较 简单的说 Lucene 不是完整的应用程序 而是一个用于实现全文检索的软件库 Nutch 是一个应用程序 可以以 Lucene 为基础实现搜索引擎应用 Lucene 为 Nutch 提供了文本索引和搜索的 API 一个常见的问题是 我应该使用 Lucene 还是 Nutch 最简单的回答是 如果你不需要抓取数据的话 应该使用 Lucene 常见的应用场合是 你有数据源 需要为这些数据提供一个搜索页面 在这 种情况下 最好的方式是直接从数据库中取出数据并用 Lucene API 建立索引 3 2 5 Nutch 常用命令 1 抓取命令 crawl 输入 bin nutch crawl 显示 crawl 命令参数选项 root bogon local bin nutch crawl Usage Crawl solr dir d threads n depth i 江汉大学本科毕业论文 设计 23 topN N 抓取 网站 将抓取内容存放在 目录下 线程数 50 抓 取深度为 5 抓取广度为 50 root bogon cd install apache nutch 1 6 runtime local root bogon local bin nutch crawl urls dir depth 5 topN 100 threads 50 solrUrl is not set indexing will be skipped crawl started in rootUrlDir urls threads 50 depth 5 solrUrl null topN 100 Injector starting at 2013 05 21 19 38 00 Injector crawlDb Injector urlDir urls Injector Converting injected urls to crawl db entries 江汉大学本科毕业论文 设计 24 图 3 1 抓取过程 2 数据库查看命令 readdb 输入 bin nutch readdb 显示 readdb 命令参数选项 root bogon local bin nutch readdb Usage CrawlDbReader stats dump topN url directory name where crawldb is located stats sort print overall statistics to System out sort list status sorted by host dump format normal csv crawldb dump the whole db to a text file in format csv dump in Csv format format normal dump in standard format default option format crawldb dump as CrawlDB regex filter records with expression status filter records by CrawlDatum status 江汉大学本科毕业论文 设计 25 url print information on to System out topN dump top urls sorted by score to skip records with scores below this value This can significantly improve performance 下面给出 stats 的统计信息 输入 root bogon local bin nutch readdb stats 图 3 2 读取连接数据库信息 通过截图信息 可以发现 刚才抓取的猫扑网 一共获得 URL2687 个 最小分值 0 0 最大分值 1 012 平均分值 8 7420916E 4 为抓取内容的 URL2602 个 3 segment 信息查看命令 readseg 输入 bin nutch readseg 显示 readseg 命令 参数选项 root bogon local bin nutch readseg Usage SegmentReader dump list get general options General options nocontent ignore content directory nofetchignore crawl fetch directory nogenerateignore crawl generate directory noparseignore crawl parse directory noparsedataignore parse data directory 江汉大学本科毕业论文 设计 26 noparsetextignore parse text directory SegmentReader dump general options Dumps content of a as a text file to name of the segment directory name of the non existent output directory SegmentRea

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论