利用开源工具构建小型搜索引擎项目报告.

合集下载

ASP3062一个小型搜索引擎的设计与实现2

ASP3062一个小型搜索引擎的设计与实现2

一个小型搜索引擎的设计与实现摘要随着互联网和宽带上网的普及,搜索引擎在中国异军突起,并日益渗透到人们的日常生活中,在互联网普及之前,人们查阅资料首先想到的是拥有大量书籍的资料的图书馆。

但是今天很多人都会选择一种更方便、快捷、全面、准确的查阅方式--互联网。

而帮助我们在整个互联网上快速地查找到目标信息的就是越来越被重视的搜索引擎。

本文通过分析国内外搜索引擎的发展现状,提出了一种功能强大,操作简单,通用性强,可以满足用户对信息搜索需要,利用ASP技术实现的一个B/S体系结构的搜索引擎系统方案。

文中着重论述了该系统的功能与实现、数据流程与存储、后台管理等。

并对关键的有关技术作了较详细的介绍。

论文在撰写过程中,力求将理论与系统应用相结合,对各种理论进行阐述的同时配合系统从实际应用和操作技巧上加以说明,希望能够更充分地体现到这些知识与技术在本系统中的应用与实现。

关键词:搜索引擎;ASP;B/S;关键目录论文总页数:23页1 引言 ............................................................................................. 错误!未定义书签。

1.1课题背景.............................................................................................................. 错误!未定义书签。

1.2搜索引擎的发展动向 ...................................................................................... 错误!未定义书签。

2 系统所用技术分析 (2)2.1系统开发环境 .................................................................................................... 错误!未定义书签。

软件工程毕业设计论文--基于Lucene与Heritrix的搜索引擎构建

软件工程毕业设计论文--基于Lucene与Heritrix的搜索引擎构建

本科毕业设计(论文)基于Lucene与Heritrix的搜索引擎构建摘要在互联网蓬勃发展的今天,互联网上的信息更是浩如烟海。

人们在享受互联网带来的便利的同时,却面临着一个如何在如此海量的内容中准确、快捷地找到自己所需要的信息的问题,由此互联网搜索引擎应运而生。

本文在对搜索引擎的原理、组成、数据结构和工作流程等方面深入研究的基础上,对搜索引擎的三个核心部分即网络蜘蛛、网页索引和搜索的分析及实现过程进行阐述。

网络蜘蛛部分采用了基于递归和归档机制的Heritrix网络爬虫;网页索引部分利用开源的Lucene引擎架构设计并实现了一个可复用的、可扩展的索引建立与管理子系统;搜索部分在Ajax技术支持上,设计并实现了一个灵活、简洁的用户接口。

本系统具有抓取网页、建立和管理索引、建立日志以及搜索信息等功能,具备一定的应用前景。

关键词:搜索引擎;中文分词;索引The Construction of Search Engine Based on Lucene and HeritrixAbstractThe contents on the Web are increasing exponentially as the rapid development of the Internet. A problem how to obtain the useful information from vast contents quickly and accurately is facing us while people are enjoying the convenience of the Internet. The solver of this problem is Web Search Engine.The analysis and implementation process of three basic components of search engine(Crawler, Indexer and Searcher) is described in this paper on the basis of further study on the principles, composition, data structure and work flow of search engine. The crawler component is implemented with Heritrix crawler based on the mechanism of recursion and archiving; A reusable, extensible index establishment and management subsystem are designed and implemented by open-source package named “Lucene” in the indexer component; The Searcher component based on the Ajax technology is designed and realized as a flexible, concise user interface. The system has some functions, such as crawling web page, establishment and management index, establishment log and search information, it has a certain application prospect.Key Words:Search Engine;Chinese Word Segmentation;Index目录摘要 (I)Abstract (II)1 绪论 (1)1.1 项目背景 (1)1.2 国内外发展现状 (1)2 系统的开发平台及相关技术 (3)2.1 系统开发平台 (3)2.2 系统开发技术 (3)2.2.1 Heritrix网络爬虫简介 (3)2.2.2 Lucene技术简介 (4)2.2.3 Ajax技术简介 (4)3 系统分析与设计 (6)3.1 系统需求分析 (6)3.1.1 系统架构分析 (6)3.1.2 系统用例模型 (6)3.1.3 系统领域模型 (10)3.2 系统概要设计 (11)3.3 系统详细设计 (12)3.3.1 索引建立子系统 (13)3.3.2 用户接口子系统 (17)4 系统的实现 (18)4.1 系统包框架的构建 (18)4.1.1 索引建立子系统 (18)4.1.2 用户接口子系统 (19)4.2 系统主要功能实现 (19)4.2.1 索引建立子系统 (19)4.2.2 用户接口子系统 (22)结论 (24)参考文献 (25)致谢 (26)1 绪论1.1 项目背景1994年左右,万维网(world wide web)出现了。

搭建自己的搜索引擎

搭建自己的搜索引擎

今天我就在这里借光年论坛在这里献丑下,写篇几篇关于自己搭建搜索引擎的文章。

所采用的是开源搜索引擎nutch,考虑到大部份的SEOER所以主要是在WINDOWS平台进行搭建。

1,Nutch简介Nutch 是一个刚刚诞生开放源代码(open-source)的web搜索引擎.尽管Web搜索是漫游Internet的基本要求, 但是现有web搜索引擎的数目却在下降. 并且这很有可能进一步演变成为一个公司垄断了几乎所有的web搜索为其谋取商业利益.这显然不利于广大Internet用户.Nutch为我们提供了这样一个不同的选择. 相对于那些商用的搜索引擎, Nutch作为开放源代码搜索引擎将会更加透明, 从而更值得大家信赖. 现在所有主要的搜索引擎都采用私有的排序算法, 而不会解释为什么一个网页会排在一个特定的位置. 除此之外, 有的搜索引擎依照网站所付的费用, 而不是根据它们本身的价值进行排序. 与它们不同, Nucth没有什么需要隐瞒, 也没有动机去扭曲搜索的结果. Nutch将尽自己最大的努力为用户提供最好的搜索结果.Nutch 致力于让每个人能很容易, 同时花费很少就可以配置世界一流的Web搜索引擎. 为了完成这一宏伟的目标, Nutch 必须能够做到:每个月取几十亿网页为这些网页维护一个索引对索引文件进行每秒上千次的搜索提供高质量的搜索结果以最小的成本运作2,安装2.1安装准备所需软件:(如果以下网址不能下载,请自行搜索)JDK1.6下载地址:/zh_CN/Tomcat 7.0.x下载址://tomcat/tomcat-7/v7.0.4-beta/bin/apache-tomcat-7.0.4.exeCygwin下载地址:/setup.exeNutch 1.0下载地址:/apache//nutch/nutch-1.0.tar.gz2.2安装:2.2.1JDK安装(我这里用的是默认的安装)接下来可以按默认的安装2.2.2 添加JDK环境变量:右击我的电脑——>属性——>高级——>环境变量->系统变量Path添加C:\Program Files\Java\jdk1.6.0_22\bin;JAVA_HOME=C:\Program Files\Java\jdk1.6.0_22(JDK安装的目录)classpath=.;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar;添加好环境变量后、我们可以输入JAVAC来看是否安装成功如:看到下面图所示的内容那么就安装成功了搭建自己的搜索引擎(1)搭建自己的搜索引擎(2)搭建自己的搜索引擎(3)搭建自己的搜索引擎(4)这下面的图片是没用的,不知怎么出来的+++++++++++++++++++++++++++++++++++++ image007.png(17.85 KB, 下载次数: 0)image043.gif(2.48 KB, 下载次数: 0)image044.gif(13.55 KB, 下载次数: 0)image046.gif(12.94 KB, 下载次数: 0)image050.gif(5.77 KB, 下载次数: 0)image051.gif(22.55 KB, 下载次数: 0)2.2.3安装Tomcat 7.0(除了选择安装目录外,别的我都选择了默认的安装)2.2.4 安装Cygwin (因为NUTCH的自带命令必需要在LINUX的环境,所以必需要安装Cygwin来模拟这种环境)点击下一步进入安装方式的选择界面上图所示Cygwin有三种安装方式1,Install from Internet:直接从Internet上下载并立即安装(安装完成后,下载好的安装文件并不会被删除,而是仍然被保留,以便下次再安装)。

21款开源搜索引擎项目介绍

21款开源搜索引擎项目介绍

21款开源搜索引擎项目介绍搜索引擎的主流语言是Java,要研究和开发搜索引擎,最好从Lucene开始,下面介绍一些开源搜索引擎系统,包含开源Web搜索引擎和开源桌面搜索引擎。

Lucene一个全文搜索引擎工具包,但只支持文本文件以及少量语种的索引;通过Lucene提供的接口,我们可以自己开发具体语言的分词器,针对具体文档的文本解析器等;Lucene是索引数据结构事实上的标准;Apache Lucene是一个基于Java全文搜索引擎,利用它可以轻易地为Java软件加入全文搜寻功能。

Lucene的最主要工作是替文件的每一个字作索引,索引让搜寻的效率比传统的逐字比较大大提高,Lucen提供一组解读,过滤,分析文件,编排和使用索引的API,它的强大之处除了高效和简单外,是最重要的是使使用者可以随时应自已需要自订其功能。

Sphider Sphider是一个轻量级,采用PHP开发的web spider和搜索引擎,使用mysql来存储数据。

可以利用它来为自己的网站添加搜索功能。

Sphider非常小,易于安装和修改,已经有数千网站在使用它。

RiSearch PHPRiSearch PHP是一个高效,功能强大的搜索引擎,特别适用于中小型网站。

RiSearch PHP非常快,它能够在不到1秒钟内搜索5000-10000个页面。

RiSearch是一个索引搜索引擎,这就意味着它先将你的网站做索引并建立一个数据库来存储你网站所有页面的关键词以便快速搜索。

Risearch是全文搜索引擎脚本,它把所有的关键词都编成一个文档索引除了配置文件里面的定义排除的关键词。

RiSearch使用经典的反向索引算法(与大型的搜索引擎相同),这就是为什么它会比其它搜索引擎快的原因。

Xapian使用C++编写,提供绑定程序使得其他语言能够方便地使用它;便于进行二次开发PhpDigPhpDig是一个采用PHP开发的Web爬虫和搜索引擎。

通过对动态和静态页面进行索引建立一个词汇表。

浅析图书馆如何搭建小型搜索引擎

浅析图书馆如何搭建小型搜索引擎
s als ac n i e m l e r he g n Ke ywo d : iia ir r S ac ngn S a c r sD g t lb ay; e rh e ie;e rh l
引 言 随着 网络 的兴起 ,搜索 引擎逐渐 被广泛 使用 。 索引擎 技术是 搜 网络 与计算机 技术结 合的产物 ,它 的发展决 定于 网络 技术 的发展 。 对 于 图书馆来 说 ,用户 的文献 检索 需求 越来 越 强 ,专业 覆盖 面 广而 专业 性细 分 ,所 购专 业 性数 据库 越来 越 多 ,信 息量 也越 来 越 大 ,为 了给 读 者提供 快速 、方便 的检 索 ,使读 者 能够 自网上 即 时获 取所 需要 的文 献资 料 ,更好 的整 合 相关 的课题 、科研 研究 信 息等 , 图书馆 可 以考虑 建设 覆盖 某些 行业 领 域或 者某 些专 业 的小 型搜 索 引擎 。 本文 尝试 着从 基本 技术 的 角度来 阐述 如何 搭 建搜 索 引擎 ,大 致可 以从 :信 息搜 集 、构建 索 引、检 索三 个 部分 来 了解 现 有开 发

爬 虫所抓 取 的页 面都 存放 在 网页库 中 ,为 了减 少所 需 的存 储 空 间 ,经 常 需要 对页 面进 行压 缩存 储 。页 面通 常都存 放 在数 据库 中,但是 对 于小 型 的搜索 系统 来 说可 以简 单地 把页 面存 成文 件 的 形式 。索 引处 理下 载 的 网页并 为搜 索提 供服 务 。索 引把每 一个 文 档记 录成 词组 和词 组在 文档 中出现 的位 置 , 同时通过 词 组出现 频 率等 计算 文档 得分 , 以便用 于 查询 结果 的排 序或 者更 进 一步 的处
Li r r w oBu l ma l e r h En i e b a y Ho t i a S d l S a c gn

基于开源框架的搜索引擎的研究与实现

基于开源框架的搜索引擎的研究与实现

华中科技大学基于开源框架的搜索引擎的研究与实现开题报告谭望达4/14/2010本文讲述了如何在开源程序的基础上搭建自己的一个简单的搜索引擎,使用Lucene,Hadoop和一些机器学习库作为搜索引擎的基础,并且还对Lucene与Hadoop的实现原理进行了比较细致的讲述,希望能够对研究和开发搜索引擎的人起到一定的帮助。

一.选题意义1.理论意义从理论的意义上来说,也有很多的地方用到了搜索引擎技术,比如说从语音识别,文本分类,模式识别,都使用到了机器学习,而机器学习的核心就是语料库(corpus),而语料库都是庞大的,一般来说动辄以T级来计算,所以如何从T(千G)级的,也就是以十亿文档级别的数据中提取出想要的数据,是一项挑战,在搜索引擎技术诞生之前是不敢想的。

可以说,搜索引擎技术与机器学习的识别的结合是未来科研的一个很重要的方向。

2.现实意义从实际出发,搜索引擎生活中作为越来越广泛的使用到的一项基本工具,从生活琐事到专业领域,日常问题可以去百度百科,科研论文可以去Google学术,消费购物可以去阿里巴巴,交友联络可以去校内网,而这些公司与检索相关的内容,都可以说或多或少的应用了很多搜索引擎的技术。

现在还有越来越多的垂直搜索引擎建立起来,也就是利用其他搜索引擎的结果进行二次排序处理,在一个个的更细分的领域中起到了很大的作用。

可以说搜索引擎作为一项互联网的基本技术被广泛的使用。

随着一个一个搜索引擎相关的公司的成功,比如Google这样一个神话般的公司,越来越多的人也关注到了这个领域。

不过想从头自己编写一个搜索引擎可不是容易的事情,而随着越来越多相关的文献的发表和开源社区的建立,创建这样的一个搜索引擎就不再是难事,而实用这些开源的搜索引擎框架,不需要过多的深入技术细节,而更多的精力可以放在想法的实现上。

开源框架的实用一般说来是免费的或者相对商业软件来说是很便宜的,用户可以在资金不太宽裕的时候放心的使用。

另外本文将讨论一下机器学习的一些内容,搜索引擎只是一个“搜索”的实现,而如何更好的把结果展示给用户,如何在数据之上实现更多的特性,就是需要机器学习来进行的,搜索引擎与机器学习是越来越不可分。

用开源软件建垂直搜索引擎

用开源软件建垂直搜索引擎

用开源软件建垂直搜索引擎作者:暂无来源:《计算机世界》 2010年第11期用Solr、Nutch等开源软件来构建电子元器件垂直搜索引擎涉及很多实现细节,本文结合实际应用系统对数据采集、中文搜索、结果输出、分页处理、整合数据库等重点问题提出了切实可行的解决方法。

■ 董娅周峻松针对搜索引擎的各种开源技术是开源社区的一枝奇葩,它大大缩短了构建搜索应用的周期,并使得根据特定需求打造个性化应用的垂直搜索引擎系统成为可能。

作为一个独立的企业搜索应用解决方案,Solr在美国的众多知名网站中得到应用,如美国最大的科技资讯类网站CNet。

Solr基于高性能的Lucene开发,它不仅实现了比Lucene更为丰富的查询语言和更为优异的查询性能,而且实现了可配置、可扩展,对外提供类似于Web 服务的API接口。

用户可通过Http 请求向搜索引擎服务器提交指定格式的XML文件生成索引,也可以通过“Http Get”操作提出查询请求,并得到XML格式的返回结果。

Solr结合其他开源搜索软件成为构建行业垂直搜索引擎的优选方案。

垂直搜索引擎的总体结构本文所述的电子元器件垂直搜索引擎以Solr 1.4为核心框架,综合应用Nutch、IK Analyzer等开源软件,充分利用它们灵活的配置、丰富的功能以及高效的性能,力求用最简单的代码,快速实现海量电子元器件信息的采集、文本搜索、参数检索,满足技术研究人员与市场采购人员对于行业领域知识的专、精、深要求。

电子元器件垂直搜索引擎系统包括数据采集、数据加工、数据规划和管理、搜索服务四个主要部分。

数据采集部分负责对Internet、Intranet、内部电子文档、结构化数据(关系数据库、XML)等进行抓取、滤重、分类、摘要; 数据加工部分负责对采集来的数据进行筛选、编辑和审校; 数据规划和管理部分负责系统元数据的定义与管理,包括分类体系、特性参数、参数类型、计量单位等; 搜索服务则为用户提供分类导航、数据检索、行业报告及其他个性定制服务(系统的总体结构如附图所示)。

数据检索平台搭建方案范文

数据检索平台搭建方案范文

数据检索平台搭建方案范文# 数据检索平台搭建方案。

一、项目概述。

咱为啥要搭建这个数据检索平台呢?很简单,就是为了能快速、准确地找到咱们想要的数据,就像在大海里捞针,但是咱得让这个捞针的过程变得超级简单、高效。

二、需求分析。

# (一)数据来源。

1. 内部数据库。

咱们公司内部那些个业务数据啊,像是销售数据、员工信息啥的,这都是宝藏,都得放到平台里能被检索到。

2. 外部数据。

有时候咱也得看看外面的世界,从网上抓点行业数据、市场调研报告之类的,这些数据也得整合进来。

# (二)用户需求。

1. 简单查询。

普通用户就想简单输入个关键词,然后就能找到相关的数据,别整那些复杂的操作,越简单越好。

2. 高级查询。

技术大神或者数据分析员呢,他们就想要更多的筛选条件,像按照日期范围、数据类型啥的来精确查找数据。

3. 数据安全。

不管是谁,都希望自己的数据安全得很,不能被乱看乱改,这是底线。

三、平台架构设计。

# (一)数据采集层。

1. 内部数据采集。

就像是小蜜蜂采蜜一样,我们得写一些程序,把内部数据库里的数据定期采集出来,然后整理成统一的格式。

比如说,销售数据可能来自不同的销售渠道,格式不太一样,我们得把它们都变成一样的,这样才能方便后面的检索。

2. 外部数据采集。

对于外部数据,我们可以用网络爬虫(当然得合法合规哈)去抓我们想要的数据,或者从一些数据供应商那里买数据,然后把这些数据也整合到我们的数据仓库里。

# (二)数据存储层。

1. 数据仓库。

这就是我们数据的大仓库啦,把采集来的所有数据都放在这里。

就像把东西都放在一个大仓库里,要分类放好,这样找起来才方便。

我们可以用关系型数据库(比如MySQL)来存储结构化数据,用非关系型数据库(比如MongoDB)来存储那些半结构化或者非结构化的数据。

2. 数据索引。

为了让查询速度像火箭一样快,我们得给数据建立索引。

这就好比给书做个目录,你想找哪部分内容,直接看目录就能快速定位到。

我们可以根据数据的特点,建立不同类型的索引,比如按照关键词、日期等。

关于搜索引擎的实训报告

关于搜索引擎的实训报告

一、实训背景随着互联网的飞速发展,搜索引擎已经成为人们获取信息、解决问题的重要工具。

为了深入了解搜索引擎的技术原理和实现方法,提高自己的编程能力和实际操作技能,我参加了本次搜索引擎技术实训。

本次实训主要涉及搜索引擎的基本原理、数据结构、算法以及实际应用等方面。

二、实训目标1. 掌握搜索引擎的基本原理和实现方法;2. 熟悉搜索引擎的关键技术,如信息检索、文本处理、索引构建等;3. 能够运用所学知识开发一个简单的搜索引擎;4. 提高自己的编程能力和实际操作技能。

三、实训内容1. 搜索引擎概述实训首先介绍了搜索引擎的基本概念、发展历程以及国内外主要搜索引擎的特点。

通过对搜索引擎的了解,使我对搜索引擎有了全面的认识。

2. 信息检索技术信息检索是搜索引擎的核心技术之一。

实训中,我们学习了布尔模型、向量空间模型等基本检索算法,了解了倒排索引、TF-IDF等检索方法。

3. 文本处理技术文本处理是搜索引擎预处理阶段的重要任务。

实训中,我们学习了中文分词、词性标注、停用词过滤等文本处理技术,为后续的索引构建和检索提供了基础。

4. 索引构建技术索引构建是搜索引擎的关键技术之一。

实训中,我们学习了倒排索引的构建方法,了解了索引优化策略,如索引压缩、索引重建等。

5. 搜索引擎实现在掌握了搜索引擎的基本原理和技术后,我们开始着手实现一个简单的搜索引擎。

实训过程中,我们选择了Python编程语言,利用jieba分词库、Whoosh索引库等工具,实现了搜索引擎的查询、检索、展示等功能。

6. 搜索引擎优化为了提高搜索引擎的检索效果,实训中我们还学习了搜索引擎优化(SEO)的相关知识。

通过优化网页内容、提高网页权重等方法,使搜索引擎能够更好地满足用户需求。

四、实训成果通过本次实训,我取得了以下成果:1. 理解了搜索引擎的基本原理和实现方法;2. 掌握了信息检索、文本处理、索引构建等关键技术;3. 实现了一个简单的搜索引擎,具备查询、检索、展示等功能;4. 提高了编程能力和实际操作技能。

中期答辩演示

中期答辩演示
• 实现一个网络搜索引擎,建立文档解析 器来解析不同格式的数据,之后建立索引 (会用到文档解析器),最后建立一个桌 面搜索应用。数据抓取 数据解析 建立索引 创建搜索引擎 测试搜索引擎 。
不足之处
• 1.应该限定被抓取的文件类型及抓取的特定 目录,这样就会抓取速度更快,效果更好… • 2.抓取网页时,数据解析内容太少,应该扩展 解析pdf,解析word,解析excel,解析xml等. • 3.建立好的索引应该被监控和优化… • 4.所有用的各种软件的源代码都得下载,在 很好的在Myelipse工程中很好的整合,调试 并运行成功!
一 实现目标
• • 1.理解搜索引擎的工作原理; 2.搭建一个可运行的实验系统。
运行原理:搜索引擎基本组成
Internet
整理数据
收集
整理/组织
搜索服务
原始数据
检索结果
二 主要步骤
1. 2. 3. 4. 数据采集(抓取) 数据分析与预处理 全文检索(建立索引 执行搜索) 小型收索引擎的设计与实现
数据分析与预处理 目标
• 信息分析是对原始数据的预处理
– 格式分析与转换(html/xml/doc/pdf/rtf) – 语种识别、编码识别与转换(GB/BIG5/Unicode) – 噪声数据的清洗 – 冗余数据的处理
数据分析与预处理
• 主要实现的部分: • 数据有很多格式,需识别数据格式, 并且把里面的文本提取出来,从而达到数 据解析的目的。下载HTMLParser组件解析 HTML文档,主要用于提取和转换HTML文 件解析成纯文本。
全文检索(建立索引 执行搜索)
• 主要实现的部分: • 下载并安装Hyper Estraier。对一个文 件建立索引,让后执行搜索;之后是对一 组文件建立索引,需要遍历文件,为每个 文件构造索引文档并将其添加到索引库中; 基于Hyper Estraier的桌面搜索应用。(索引 器,搜索器)

如何使用开源工具构造小型搜索引擎

如何使用开源工具构造小型搜索引擎

16
2011-4-28
信息的搜集- 信息的搜集-请求消息
• • Host头域 Host头域指定请求资源的Intenet主机和端口号,必须表示请求url的原始服务器或网关的位置。 HTTP/1.1请求必须包含主机头域,否则系统会以400状态码返回。 Referer头域 头域 Referer头域允许客户端指定请求uri的源资源地址,这可以允许服务器生成回退链表,可用来 登 陆、优化cache等。它也允许废除的或错误的连接由于维护的目的被追踪。如果请求的uri没有自己 的uri地址,Referer不能被发送。如果指定的是部分uri地址,则此地址应该是一个相对地址。 Range头域 头域 Range头域可以请求实体的一个或者多个子范围。 例如, 表示头500个字节:bytes=0-499 表示第二个500字节:bytes=500-999 表示最后500个字节:bytes=-500 表示500字节以后的范围:bytes=500第一个和最后一个字节:bytes=0-0,-1 同时指定几个范围:bytes=500-600,601-999 但是服务器可以忽略此请求头 User-Agent头域 头域 包含发出请求的用户信息。
• Location响应头:
Location响应头用于重定向接收者到一个新URI地址。
• Server响应头:
Server响应头包含处理请求的原始服务器的软件信息。此域能 包含多个产品标识和注释,产品标识一般按照重要性排序。
19
2011-4-28
信息的搜集- 信息的搜集-实体头域 • Content-Type实体头:
Reason-Phrase:
1、对Status-Code提供一个简单的文本描述,用于帮助用户理解
其他:
响应头域允许服务器传递不能放在状态行的附加信息,这些域主要描述服务器的信 息和Request-URI进一步的信息。

搜索引擎的实训报告模板

搜索引擎的实训报告模板

一、实训背景随着互联网技术的飞速发展,搜索引擎已经成为人们获取信息、解决问题的重要工具。

为了更好地了解搜索引擎的工作原理、技术架构以及应用场景,我们进行了为期两周的搜索引擎实训。

本次实训旨在通过理论学习、实践操作和项目开发,提高我们对搜索引擎技术的理解和应用能力。

二、实训目标1. 理解搜索引擎的基本原理和关键技术;2. 掌握搜索引擎开发的基本流程和工具;3. 能够设计和实现简单的搜索引擎;4. 提高团队协作能力和项目开发能力。

三、实训内容1. 搜索引擎基本原理(1)搜索引擎概述介绍了搜索引擎的定义、分类、工作流程等基本概念,使我们对搜索引擎有了初步的认识。

(2)搜索引擎的关键技术详细讲解了搜索引擎的关键技术,包括信息检索、自然语言处理、文本挖掘、网页爬虫等。

2. 搜索引擎开发工具(1)搜索引擎开发框架介绍了搜索引擎开发常用的框架,如Elasticsearch、Solr等。

(2)搜索引擎开发语言讲解了搜索引擎开发常用的编程语言,如Java、Python等。

3. 搜索引擎实践操作(1)搜索引擎搭建在服务器上搭建搜索引擎环境,包括安装Elasticsearch、Solr等框架。

(2)数据导入与索引将数据导入搜索引擎,并进行索引操作,以便快速检索。

(3)搜索功能实现实现基本的搜索功能,包括关键词搜索、布尔搜索、分页显示等。

4. 项目开发(1)项目需求分析根据实际需求,确定搜索引擎项目的技术方案和功能模块。

(2)项目设计与开发设计搜索引擎的架构,编写代码实现功能模块,并进行测试。

(3)项目部署与优化将搜索引擎部署到服务器,并进行性能优化。

四、实训过程1. 理论学习通过查阅相关资料、观看视频教程,了解搜索引擎的基本原理和关键技术。

2. 实践操作在服务器上搭建搜索引擎环境,进行数据导入、索引和搜索功能实现。

3. 项目开发根据项目需求,设计搜索引擎架构,编写代码实现功能模块,并进行测试。

4. 团队协作在项目开发过程中,与团队成员保持良好的沟通,共同解决问题,提高团队协作能力。

《基于Lucene的蒙古文搜索引擎的设计与实现》范文

《基于Lucene的蒙古文搜索引擎的设计与实现》范文

《基于Lucene的蒙古文搜索引擎的设计与实现》篇一一、引言随着信息技术的飞速发展,搜索引擎已经成为人们获取信息的重要途径。

为了满足蒙古文信息检索的需求,基于Lucene的蒙古文搜索引擎应运而生。

Lucene是一个开源的全文搜索引擎库,具有良好的可扩展性和灵活性,能够满足各种语言和领域的信息检索需求。

本文将介绍基于Lucene的蒙古文搜索引擎的设计与实现。

二、系统设计1. 需求分析在系统设计阶段,首先进行需求分析。

考虑到蒙古文的特点,系统需要支持蒙古文的分词、索引和搜索等功能。

同时,为了提高搜索效率,系统还需要支持高效的索引构建和查询优化。

2. 系统架构基于需求分析,系统采用分层架构设计,包括数据层、业务逻辑层和用户界面层。

数据层负责存储和管理蒙古文文本数据,业务逻辑层负责实现搜索引擎的核心功能,如分词、索引和搜索等,用户界面层则提供友好的用户交互界面。

3. 技术选型选用Lucene作为搜索引擎的核心库,使用Java语言进行开发。

同时,为了支持蒙古文的处理,需要引入相应的蒙古文分词器和字符集转换工具。

三、系统实现1. 数据预处理在数据预处理阶段,首先对蒙古文文本进行分词,将文本切分成单词或短语。

然后进行文本清洗,去除无关信息和噪声数据。

最后进行文本编码转换,将蒙古文文本转换为Lucene能够处理的字符集。

2. 索引构建索引构建是搜索引擎的核心部分,直接影响到搜索效率和准确性。

在索引构建阶段,首先将预处理后的文本数据导入Lucene 库中,然后进行倒排索引构建。

倒排索引是一种用于快速定位文本中单词或短语出现位置的数据结构,能够大大提高搜索速度。

3. 搜索功能实现搜索功能是搜索引擎的重要部分,直接关系到用户体验。

在搜索功能实现阶段,需要根据用户的查询条件进行查询解析、分词、匹配和排序等操作。

为了提高搜索效率和准确性,可以引入一些优化手段,如词频统计、停用词过滤等。

四、系统测试与优化1. 系统测试在系统开发完成后,需要进行系统测试。

大连理工大学搜索引擎与文本挖掘课程设计需求报告 - 搭建小型搜索引擎

大连理工大学搜索引擎与文本挖掘课程设计需求报告 - 搭建小型搜索引擎

需求报告——搜索引擎与文本挖掘日期:2014.10.29 目标:在理解搜索引擎原理及整体流程的基础上,通过亲自动手搭建一个完整、可运行的小型全文检索实验系统,进一步加深对搜索引擎系统底层实现的理解和掌握,熟悉搜索方面的一些经典算法和思想。

可选工具索引、检索工具:Lucene、Indri、Firtex等网页爬行器(Crawler):Weblech、Nutch Crawler、Wget、Larbin等Web服务:Tomcat、Apache等分词组件:对于中文语料来说,不能采用Lucene默认的分词器(如StandardAnalyzer等),必须引入新的、适合中文的分词器。

可以自己实现一个简单的基于最大匹配的分词程序,也可以上网下载Lucene的扩展分词组件包CJKAnalyzer(二字串方式分词),当然也可以采用第三方分词组件,如中科院ICTCLAS分词组件等。

功能要求(必须):1、利用开源的网页爬行器或者自己开发的网页爬行器,爬取一定数目的网页。

2、对网页进行必要的去噪,预处理工作。

3、采用Lucene等全文检索工具包对数据建立倒排索引,并能提供检索服务4、返回给用户的应该是一个进过相关性排序的结果列表5、不能采用Lucene默认的分词器分词,必须完成一个中文分词接口。

6、必要的预处理工作。

中文:分词、停用词过滤。

英文:大小写转化(Case insensitive)、词干化(Stemming)、停用词过滤。

7、结果高亮显示注意事项:1、中文分词可以借助现有的组件,如中科院ICTCLAS分词组建、哈工大IRLAS词法分析系统等。

这时需要做的是,根据Lucene的Analyzer接口规范将上述分词组建进行封装,使之可被索引器、搜索器等调用。

2、英文的词干化(Stemming)可以调用网上现有的算法实现,比过Porter StemmingAlgorithm算法等。

3、用户界面可以仿照Google、百度等,不要太花哨,简洁、大方即可。

Java应用开源框架实现简易web搜索引擎

Java应用开源框架实现简易web搜索引擎

Java应⽤开源框架实现简易web搜索引擎引⾔应⽤ Java 的开源库,编写⼀个搜索引擎,这个引擎能爬取⼀个⽹站的内容。

并根据⽹页内容进⾏深度爬取,获取所有相关的⽹页地址和内容,⽤户可以通过关键词,搜索所有相关的⽹址。

具体功能(1) ⽤户可以指定爬取⼀个url对应的⽹页的内容。

(2) 对⽹页内容进⾏解析,并获取其中所有的url链接地址。

(3) ⽤户可以设定爬取深度,代表着从初始url对应的页⾯开始,可以爬取其中所有的url对应的⽹页内的url,以此类推。

深度越⼤,能爬取到的⽹站越多。

(4) 对爬取到的url内容进⾏保存、建⽴索引。

建⽴索引的内容是url地址本⾝,和url对应的⽹页标题。

(5) ⽤户可以通过关键词对⽹址进⾏搜索,找出有该关键词的url地址。

(6) 建⽴索引和搜索索引的过程能智能识别中⽂关键词,能对关键词进⾏分词操作。

(7) ⽤户可以指定保存索引的地址、初始url、爬取深度、进⾏搜索的关键词和最⼤匹配项。

开源框架1. Lucene2. Jsoup源码爬⾍部分:Spider.javapackage webCrawler.Spider;import java.io.IOException;import java.util.ArrayList;import java.util.HashSet;import java.util.Scanner;import org.jsoup.Jsoup;import org.jsoup.nodes.Document;import org.jsoup.nodes.Element;import org.jsoup.select.Elements;import webCrawler.Index.BuildIndex;/*** @author lannooo*/public class Spider {ArrayList<String> URLs;private String startURL;private int digLevel;/*** @param startURL 爬⾍的起始URL* @param digLevel 爬取深度*/public Spider(String startURL, int digLevel){this.startURL = startURL;this.digLevel = digLevel;this.URLs = new ArrayList<>();}/*** @param level 当前爬取的深度剩余* @param arrayList 需要进⾏下⼀轮爬去的URL集* @return 从⼀格url集爬取到的新的URL集* @throws IOException*/public ArrayList<String> getLevelURLs(int level, ArrayList<String> arrayList)throws IOException{ArrayList<String> total = null;if(level>0){total = new ArrayList<>();for(String url: arrayList){/*对于每个arrayList中的URL,⾸先解析其⽹页内容,并获得⾥⾯所有URL项*/ for(String each: getBareLinks(url)){total.add(each);}}/*⽤HashSet这个容器将total⾥⾯重复项删除*/HashSet<String> hashSet = new HashSet<>(total);total = new ArrayList<>(hashSet);}return total;}/*** 从startURL开始,爬取所有相关URLs* @throws IOException*/public void getAll() throws IOException{ArrayList<String> newURLs;ArrayList<String> currentURLs = new ArrayList<>();/*把startURL加⼊currentURLs这个列表中,从这个url开始爬*/currentURLs.add(startURL);for(int i=digLevel; i>0; i--){/** 对于每⼀层,都要获取⼀次由这个url引申出去的url集* 然后把当前集的已经爬去过的url加⼊到总的URL集中* 最后newURLs作为新的需要进⾏深度爬取的集进⼊下⼀轮循环*/System.out.println("Dig into level: " + (digLevel-i+1));newURLs = getLevelURLs(i, currentURLs);for(String each: currentURLs){URLs.add(each);}currentURLs = newURLs;}for(String each:currentURLs){URLs.add(each);}HashSet<String> hashSet = new HashSet<>(URLs);URLs = new ArrayList<>(hashSet);}/*** @param path 保存索引的路径* @throws IOException*/public void storeURLsAndInfo(String path) throws IOException{BuildIndex build = new BuildIndex(path);/* 把URLs中的所有url进⾏实际⽹页标题的爬取*/for(String each:URLs){String text = getLinkText(each);if(text!=null){build.addField("url", each);build.addField("text", text);/*将这⼀个entry加⼊索引中*/build.pushIndex();}}build.close();}/*** @param url 需要获取⽹页标题的url* @return 标题内容* @throws IOException*/public String getLinkText(String url) throws IOException{Document document = null;try {/*⽤Jsoup进⾏连接,设置超时时间为3秒*/document = Jsoup.connect(url).timeout(3000).get();} catch (Exception e) {System.out.println("[TIMEOUT]Get title of url:"+url);return null;}String title = document.title();return title;}/*** @param url 进⾏内容解析的url* @return 返回该url的⽹页内容内的所有urls列表* @throws IOException*/public ArrayList<String> getBareLinks(String url) throws IOException{ArrayList<String> linksList = new ArrayList<>();Document document;try {document = Jsoup.connect(url).timeout(2000).get();} catch (Exception e) {return linksList;}/*获取<body>标签理的所有带href属性的<a>标签*/Elements links = document.select("body").select("a[href]");for(Element link: links){/*从每⼀个解析得到的<a>标签中提取url,并去除锚点*/String href = link.attr("abs:href").replaceAll("#", "");/*只添加含有字符的url,去除末尾的'/'*/if(href.contains("")){if (href.endsWith("/")){href = href.substring(0, href.length()-1);}linksList.add(href);}}HashSet<String> hashSet = new HashSet<>(linksList);ArrayList<String> arrayList = new ArrayList<>(hashSet);return arrayList;}public static void main(String[] args) {Scanner in = new Scanner(System.in);System.out.println("Enter url:");String url = in.nextLine().trim();while(!url.startsWith("http://")){System.out.println("http:// is needed!");System.out.println("Enter url:");url = in.nextLine().trim();}System.out.println("Enter depth to dig more urls[<=3 recommended]:"); int depth = in.nextInt();Spider spider = new Spider(url, depth);System.out.println("Enter path you want to save[default=d:/index-spider]:"); String path = in.nextLine().trim();if(path.length()==0){path = "d:/index-spider";}try {System.out.println("Start fetching...");spider.getAll();System.out.println("Urls got success!");spider.storeURLsAndInfo(path);System.out.println("Stored success!");} catch (IOException e) {e.printStackTrace();}}}建⽴索引:BuildIndex.javapackage webCrawler.Index;import java.io.*;import org.apache.lucene.analysis.Analyzer;import org.apache.lucene.document.Document;import org.apache.lucene.document.Field;import org.apache.lucene.document.TextField;import org.apache.lucene.index.IndexWriter;import org.apache.lucene.index.IndexWriterConfig;import org.apache.lucene.store.Directory;import org.apache.lucene.store.FSDirectory;import org.apache.lucene.util.Version;import org.wltea.analyzer.lucene.IKAnalyzer;/*** @author lannooo**/public class BuildIndex {private File file;private Directory directory;private IndexWriter indexWriter;private IndexWriterConfig config;private Analyzer analyzer;private Document document;/*** @param path 建⽴索引的路径*/public BuildIndex(String path) {try {file = new File(path);directory = FSDirectory.open(file);document = new Document();analyzer = new IKAnalyzer(); /*中⽂分词⼯具类*/config = new IndexWriterConfig(Version.LUCENE_4_10_0, analyzer); indexWriter = new IndexWriter(directory, config);} catch (Exception e) {e.printStackTrace();}}/*** @param fieldName 加⼊到document中的新的⼀项的名称* @param fieldText 新的⼀项的内容*/public void addField(String fieldName, String fieldText){try{Field field = new TextField(fieldName, fieldText, Field.Store.YES); document.add(field);}catch (Exception e) {e.printStackTrace();}}/*** 将document加⼊到索引中*/public void pushIndex(){try {indexWriter.addDocument(document);document = new Document();} catch (Exception e) {e.printStackTrace();}}/*** 加⼊完整的⼀个document并保存到索引中* @param url 加⼊的url地址* @param text url对应的⽂本*/public void addOneIndex(String url, String text){this.addField("url", url);this.addField("text", text);this.pushIndex();}/*** 关闭索引写⼊*/public void close(){try {indexWriter.close();} catch (Exception e) {e.printStackTrace();}}}搜索索引package webCrawler.Index;import java.io.File;import java.util.Scanner;import org.apache.lucene.analysis.Analyzer;import org.apache.lucene.document.Document;import org.apache.lucene.index.DirectoryReader;import org.apache.lucene.queryparser.classic.QueryParser;import org.apache.lucene.search.IndexSearcher;import org.apache.lucene.search.Query;import org.apache.lucene.search.ScoreDoc;import org.apache.lucene.search.TopDocs;import org.apache.lucene.store.FSDirectory;import org.wltea.analyzer.lucene.IKAnalyzer;/*** @author lannooo**/public class SearchIndex {private IndexSearcher indexSearcher;private Analyzer analyzer;private QueryParser parser;private Query query;private TopDocs hits;private DirectoryReader reader;/*** @param path 进⾏索引搜索的路径*/public SearchIndex(String path){try {reader = DirectoryReader.open(FSDirectory.open(new File(path))); indexSearcher = new IndexSearcher(reader);analyzer = new IKAnalyzer();} catch (Exception e) {e.printStackTrace();}}/*** @param fieldName 搜索的域名称* @param text 搜索的内容* @param matchNumber 最⼤匹配项数* @return 搜索到的最⼤匹配数*/public int search(String fieldName, String text, int matchNumber){ try {parser = new QueryParser(fieldName, analyzer);query = parser.parse(text);hits = indexSearcher.search(query, matchNumber);return hits.totalHits;} catch (Exception e) {e.printStackTrace();}return -1;}/*** 打印所有的匹配项public void printHits(){try{System.out.println("Total hits number:"+hits.totalHits);for(ScoreDoc doc: hits.scoreDocs){Document document = indexSearcher.doc(doc.doc);System.out.println(document.get("url"));System.out.println(document.get("text"));}reader.close();}catch (Exception e) {e.printStackTrace();}}public static void main(String[] args) {/*输⼊关键词*/Scanner in = new Scanner(System.in);System.out.println("Enter path of the index:");String path = in.nextLine().trim();while(path.length()==0){System.out.println("Enter path of the index:");path = in.nextLine().trim();}System.out.println("Enter max hit number:");int max = in.nextInt();while(max<0){System.out.println("Enter max hit number:");max = in.nextInt();}in.nextLine();System.out.print("Search>>> ");String text = in.nextLine().trim();/*循环读⼊⽤户的关键词,如果是q则退出,长度为0也退出*/while(!text.equals("q")){if(text.length()>0){SearchIndex search = new SearchIndex(path);int hits = search.search("text", text, max);if(hits!=-1){search.printHits();}}System.out.print("Search>>> ");text = in.nextLine().trim();}}}UI界⾯(这⾥为了⽅便只是命令⾏的形式,可以根据需求写⼀个GUI界⾯)package webCrawler.UI;import java.util.Scanner;import webCrawler.Index.SearchIndex;/*** @author lannooo**/public class UI {public static void main(String[] args) {/*输⼊关键词*/Scanner in = new Scanner(System.in);System.out.print("Search>>> ");String text = in.nextLine().trim();/*对于⽤户的关键词,如果是q则退出,长度为0也退出*/while(!text.equals("q") && text.length()>0){SearchIndex search = new SearchIndex("d:/index-spider2");int hits = search.search("text", text, 20);if(hits!=-1){search.printHits();}System.out.print("Search>>> ");text = in.nextLine().trim();}}以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

小型搜索引擎的设计与实现

小型搜索引擎的设计与实现

摘要互联网上的信息每天都以指数量级的速度爆炸性增长,面对如此浩瀚的资源,搜索引擎为所有网上冲浪的用户提供了一个入口,所有的用户都可以从搜索引擎出发到达自己想去的网上任何一个地方。

因此它也成为除了电子邮件以外最多人使用的网上服务。

但是,随着信息多元化的增长,千篇一律的给所有用户提供同一个入口显然已经不能满足特定用户更深入的查询需求。

本文首先详细介绍了基于英特网的搜索引擎的系统结构,然后从网络机器人、索引引擎、Web服务器三个方面进行详细的说明。

这不仅对政府、企业、院校的发展极为不利,还在宏观上成为制约我国信息化建设健康良性发展的一大障碍。

搜索引擎不是单纯的技术问题。

在互联网时代,哪一个公司掌握了包括搜索引擎、信息传递在内的基础软件,它就能在竞争中傲视群雄;哪一个国家掌握和普及了这些技术,她就能在运用互联网的商业竞争占尽先机。

关键词:搜索引擎,网络机器人,优化策略,索引AbstractInformation on the Internet grows explosively every day.Search engine provides all the surfers on it with an entrance,from which they can reach every corner of the web.Therefore,search engine becomes the most popular network service second to email.With information continuing to explode in all directions, however,some specific kinds of users are not satisfied with only one entrance. This article fist introduces the system structure of search engine based on the internet in detail,then gives a minute explanation form Spider search,engine and web server.This not only is extremely disadvantageous to the development of the government,business enterprise,college,but also become to make on the macro view the roughly our country information turns a big obstacle of the positive development in health in developments.Searching for the engine is not a pure technique problem.Look down upon the group of heroes in Internet ages,which companies control include manhunt engine,information deliver foundation in inside software,it can in the competition;Which nations controled with made widely available these techniqueses,she can occupy at the business that make use of the Internet competition exhausted first timing.Key words:Search Engine,Robot,Optimize Strategies,Index目录摘要 (1)Abstract (2)第一章概述 (5)1.1引言 (5)1.2课题的基本内容 (6)1.2.1搜索引擎三段式工作流程: (6)1.3开发环境 (7)第二章搜索引擎的技术概要 (9)2.1搜索引擎简述 (9)2.2基于I NTERNET的搜索引擎的构成的 (10)2.2.1网络蜘蛛 (10)2.2.2索引 (10)2.2.3搜索引擎软件 (10)2.3搜索引擎的主要指标及其分析 (11)第三章网络机器人 (12)3.1什么是网络机器人 (12)3.2网络机器人的结构 (12)3.2.1网络机器人(SPIDER)的组成 (12)3.3HTML语言 (13)3.4网络机器人的实现及代码分析 (14)3.4.2结点的结构体 (15)3.5关于机器人礼节及ROBOT.TXT (21)3.5.1机器人礼节 (21)3.5.2robot.txt (21)3.6特点和存在问题 (22)第四章搜索引擎优化策略 (24)4.1站点角度 (24)4.2用户角度 (26)第五章系统实现及结论 (27)5.2搜索引擎的完成情况 (27)5.3存在的问题 (27)5.4心得体会 (27)致谢 (27)参考文献 (28)第一章概述1.1引言随着计算机技术和互联网技术的飞速发展,人们越来越依靠网络来查找他们所需要的信息,但是,由于网上的信息源多不胜数,也就是我们经常所说的"Rich Data,Poor Information"。

.net小型搜索引擎系统开题报告

.net小型搜索引擎系统开题报告

开题报告论文(设计)题目:基于.net的小型搜索引擎系统的设计与实现院系:计算机学院专业名称:计算机科学与技术网络工程方向年级:姓名:学号:指导教师姓名:指导教师职称:副教授填表时间:年月日填表说明:1.《开题报告》须由指导教师和指导教师小组集中开题指导并修改后由学生本人填写。

指导教师、指导教师小组及院(系)负责人在学生填写后,应在相应栏目里填写意见。

最后由院(系)盖章备案保存。

2.学生须按栏目填写《开题报告》,不得作实质性改变,填写应详细完整。

3.本表由教务处统一制作,用蓝色或黑色水笔认真填写,做到填写整洁、正确。

拟选基于.net的小型搜索引擎系统的设计与实现题目选题依据及研究意义随着计算机技术及网络的普及,人们对知识的获取不只来源于学校课堂,很大一部分来源于网络平台。

如何为用户提供一个层次清晰、内容丰富的网络学习平台,成为国内外的研究热点及网络教学的趋势。

传统的网络学习平台大都信息分类简单,知识脉络不够清晰,而检索系统大多是基于数据库系统自带的查询命令,如“like%keyword%”的形式实现检索。

这种检索方法不能分词、不够智能、检索结果的排列顺序也不够合理。

针对传统网络学习平台的不足,本文提出的新型的网络学习系统不仅提供对知识信息的解读,还分析知识内部的联系,梳理知识脉络,将知识以立体网络的形式展现给用户,从而使用户对知识信息有更立体深刻的了解;同时为了能够保证用户高效、准确地检索到需要的信息,本系统的检索模块中引入了新型的专用于.Net平台的全文检索技术。

选题的研究现状针对目前学习平台中信息简单罗列、组织层次不清晰的问题,利用.net平台上的、SilverLight 技术设计实现了一个B/S架构的知识网络系统。

分析了树形结构的特点,提出了递归寻路径法,将知识信息层次清晰地展现给用户,并实现节点间路径的获取。

通过对全文检索技术的研究,将其与SQL Server数据库的索引技术相结合,实现了一个高效的检索引擎。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

深圳大学考试答题纸(以论文、报告等形式考核专用)二○~二○学年度第学期课程编号1501320002 课程名称搜索引擎技术主讲教师王旭评分学号姓名专业年级题目:利用开源工具构建小型搜索引擎一、项目操作环境及基本操作工具:操作系统:Win10。

基本操作环境:基于Heritrix+ Lucene;java。

基本操作工具:JDK 1.8,MyEclipse Professional 2014,Tomcat 8.0.27,Heritrix 1.14.4,Lucene 2.1.0,— JE-analysis-1.5.3, Htmlparser 1.5。

基本操作工具基本功能介绍:JDK 1.8:JDK(Java SE Development Kit)包括Java开发包和Java开发工具,是一个写Java 的applet和应用程序的程序开发环境。

它由一个处于操作系统层之上的运行环境还有开发者编译,调试和运行用Java语言写的applet和应用程序所需的工具组成。

MyEclipse Professional 2014: Eclipse是一种可扩展的开放源代码IDE。

2001年11月,IBM公司捐出价值4,000万美元的源代码组建了Eclipse联盟,并由该联盟负责这种工具的后续开发。

集成开发环境(IDE)经常将其应用范围限定在“开发、构建和调试”的周期之中。

为了帮助集成开发环境(IDE)克服目前的局限性,业界厂商合作创建了Eclipse平台。

MyEclipse,是在eclipse 基础上加上自己的插件开发而成的功能强大的企业级集成开发环境。

Tomcat 8.0.27:—Tomcat服务器是一个免费的开放源代码的Web 应用服务器,它是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。

—Tomcat 8支持最新的Servlet 3.1 和JSP 2.3 规范。

因为Tomcat技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web应用服务器。

Heritrix 1.14.4:Heritrix是一个开源、可扩展的Web爬虫项目。

Heritrix设计成严格按照robots.txt 文件的排除指示和META robots标签。

Lucene 2.1.0:—Lucene是Apache软件基金会jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。

JE-analysis-1.5.3:是一个免费的Lucene中文分词组件。

Htmlparser 1.5:是一个纯的java写的html解析的库,Htmlparser不依赖于其它的java库,Htmlparser主要用于改造或提取html。

二、该搜索引擎系统的基本构架:先通过爬虫爬取原始网页并进行网页搜集;然后进行网页预处理;接着建立索引indexs;最后进行查询服务。

三、具体搭建和配置过程及问题分析:(1)基本工具的安装:a、JDK1.8的安装:并配置环境变量:JA V A_HOME:C:\Program Files\Java\jdk1.8.0_66JRE_HOME:C:\Program Files\Java\jre1.8.0_66CLASSPATH:%JA V A_HOME%\jre\lib\rt.jar;.;PA TH:%JA V A_HOME%\jre\lib\rt.jar;.;b、MyEclipse的安装:运行.exe文件c、Tomcat的安装:解压安装;设置环境变量:CATALINE_HOME:D:\big work\an zhuang\apache-tomcat-8.0.30;设置好之后,测试一下Tomcat。

打开Bin文件夹,运行startup.bat;打开浏览器,输入http://localhost:8080(或者http://127.0.0.1:8080),如果看到下图所示的界面,表明Tomcat运行正常:d、其他工具解压即可。

(2)Heritrix工程的建立:a、解压Heritrix-1.14.4和Heritrix-1.14.4-src文件,b、新建项目工程Heritrix:c、配置该工程:1、将Heritrix-1.14.4和Heritrix-1.14.4-src文件从上述网站中下载。

2、将文件中的lib放入工程中,右键工程->build path->configure build path->add external jars,将lib中所有jar包添加到library中。

3、将文件中src\java\的org和st两个文件夹放到工程文件的src目录下。

4、将src\conf\下的所有文件及其文件夹拖至工程文件下,修改heritrix.properties中的heritrix.version=1.14.4; heritrix.cmdline.admin=admin:admin,这是分别是版本号和登录所需要的用户(左)和密码(右)。

5、将src下除了conf和java以外的所有文件夹,拖至工程文件目录下。

6、运行run,成功时会显示版本:7、创建好的Heritrix目录结构如下:d、网页搜集:1、扩展Heritrix:新建一个类,叫FrontierSchedulerForScu,派生于org.archive.crawler.postprocessor.FrontierScheduler,它的代码如下:屏蔽zip、rar、exe文件,只抓取网页,并且抓取的网页中必须包含scu(即四川大学)打开文件conf\modules\Processor.options— 添加新建的module选项:— org.archive.crawler.postprocessor.FrontierSchedulerForSzu|FrontierSchedulerForScu:取消robots.txt的限制:找到org.archive.crawler.prefetch中的PreconditionEnforcer类: 找到considerRobotsPreconditions函数,将该函数内的全部代码注释掉或者直接删除添上return false:f、网页抓取:1、登录Heritrix:运行Tomcat后登录http://localhost:8080(或者http://127.0.0.1:8080)2、Heritrix的控制台如下:3、设置seed:设置为四川大学的URLSelect Crawl Scope选择org.archive.crawler.scope.BroadScope:抓取网页后会生成镜像文件便于查看:Select Post Processors第三项修改为org.archive.crawler.postprocessor.FrontierSchedulerForScu其他设置如图:5、参数设置:—点击Settings ,这里只需要修改user-agent 和from :@VERSION@表示版本,后面的URL 输入/。

Email 也同样是输入一个有效的email 。

—设置好之后,点击Submit Job ,返回Console 界面,刷新一下(start 和refresh ),就开始运 行:如图可得到一下的进度条:6、最终抓取的到的结果在工作区间的Heritrix下的jobs文件夹中:共抓取约13万个文件。

(3)进行网页预处理:a、添加htmlparser解析网页:将下载的htmlparser相关的压缩包解压,找到htmlparser.jar文件,将至导入library中。

b、添加解析网页文件:Page.java:代码如下:c、对Config.properties进行配置:mirror.path是得到的网页文件的地址:D:\bigwork\Heritrix_Lucene-20151208\Heritrix-1.14.4\jobs\ sichuan-university-20151223130135337files.path是将网页文件解析后存放的文件地址;Index.path是网页解析文件建立得到的索引的存放地址。

d、添加文件Extractor.java代码如下:package .szu.search.extractor;import org.htmlparser.*;import org.htmlparser.util.*;import org.htmlparser.visitors.*;import org.htmlparser.nodes.*;import org.htmlparser.tags.*;import .szu.search.page.*;import .szu.search.util.*;public class Extractor implements Runnable{private String filename;private Parser parser;private Page page;private String encode;public void setEncode(String encode) {this.encode = encode;}private String combineNodeText(Node[] nodes) {StringBuffer buffer = new StringBuffer();for (int i = 0; i < nodes.length; i++) {Node anode = (Node)nodes[i];String line = null;if (anode instanceof TextNode) {TextNode textnode = (TextNode)anode;line = textnode.getText();}else if (anode instanceof LinkTag) {LinkTag linknode = (LinkTag)anode;line = linknode.getLinkText();}else if (anode instanceof Div) {if (anode.getChildren() != null) {line = combineNodeText(anode.getChildren().toNodeArray());}}else if (anode instanceof ParagraphTag) {if (anode.getChildren() != null) {line = combineNodeText(anode.getChildren().toNodeArray());}}else if (anode instanceof Span) {if (anode.getChildren() != null) {line = combineNodeText(anode.getChildren().toNodeArray());}}else if (anode instanceof TableTag) {if (anode.getChildren() != null) {line = combineNodeText(anode.getChildren().toNodeArray());}}else if (anode instanceof TableRow) {if (anode.getChildren() != null) {line = combineNodeText(anode.getChildren().toNodeArray());}}else if (anode instanceof TableColumn) {if (anode.getChildren() != null) {line = combineNodeText(anode.getChildren().toNodeArray());}}if (line != null) {buffer.append(line);}}return buffer.toString();}private String getUrl (String filename) {String url = filename;url = url.replace(ProperConfig.getValue("mirror.path")+"/mirror", "");if (stIndexOf("/") == url.length()-1) {url = url.substring(0,url.length()-1);}url = url.substring(1);return url;}private int getScore(String url, int score) {String[] subStr = url.split("/");score = score - (subStr.length-1);return score;}private String getSummary(String context) {if (context == null) {context = "";}return MD5.MD5Encode(context);}public void extract(String filename) {System.out.println("Message: Now extracting " + filename);this.filename = filename.replace("\\", "/");run();if (this.page != null) {PageLib.store(this.page);}}@Overridepublic void run() {// TODO Auto-generated method stubtry {parser = new Parser(this.filename);parser.setEncoding(encode);HtmlPage visitor = new HtmlPage(parser);parser.visitAllNodesWith(visitor);page = new Page();// get page's URLSystem.out.println(this.filename);System.out.println(getUrl(this.filename));this.page.setUrl(getUrl(this.filename));System.out.println(this.page.getUrl());// get page's titleString textInPage = visitor.getTitle();System.out.println(textInPage);this.page.setTitle(textInPage);// testing <body> is null or not, if null, un-extractingif (visitor.getBody() == null) {this.page.setContext(null);}else {// if have value, extractingthis.page.setContext(combineNodeText(visitor.getBody().toNodeArray()));}// count page's scorethis.page.setScore(getScore(this.page.getUrl(), this.page.getScore()));// count page's summarythis.page.setSummary(getSummary(this.page.getContext()));}catch (ParserException pe) {this.page = null;pe.printStackTrace();System.out.println("Continue...");}}}e、PageLib.java文件:f、ProperConfig.java文件,代码如下:g、MD5.java文件,代码如下:h、TestExtractor.java测试类文件:(4)建立索引:1、 将lucene的jar包和je分词的jar包导入到Project当中,导入方法同前边章节所示的htmlparser的导入方法,导入成功后,再新建一个包,命名为.scu.search.index。

相关文档
最新文档