【java毕业设计】基于java+Lucene+Tomcat的搜索引擎设计与实现(毕业论文+程序源码)——搜索引擎_论文是基于lucene,毕设可以用es写吗?-程序员宅基地

技术标签: tomcat  lucene  精选毕业设计完整源码+论文  

基于java+Lucene+Tomcat的搜索引擎设计与实现(毕业论文+程序源码)

大家好,今天给大家介绍基于java+Lucene+Tomcat的搜索引擎设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦。需要下载开题报告PPT模板及论文答辩PPT模板等的小伙伴,可以进入我的博客主页查看左侧最下面栏目中的自助下载方法哦

文章目录:

1、项目简介

  1. 搜索引擎的定义就是指按照既定的策略与方法,采取相关的计算机程序,通过在互联网中进行寻找信息,并显示信息,最后把找到的信息进行整理和筛选,为搜索引擎的使用者提供检索信息的服务,终极目标是为了提供给使用者,他所搜索信息相关的资料的计算机系统。搜索引擎的种类繁多,既可以进行全文的索引,还可以进行目录的索引,不仅有集合式的搜索引擎,还有垂直搜索的引擎以及元搜索引擎。除此之外,还有门户搜索引擎和免费链接列表等等。

  2. 本文首先介绍了搜索引擎出现的必要性,以及什么是搜索引擎、搜索引擎的分类、处理流程、核心技术,同时也对如何才能提高搜索引擎的精准度以及关联度进行了更加深入的研究。

  3. 经过对搜索引擎的研究同时与Lucene自身的特性相结合,搜索引擎的设计与实现需要实现的功能阐述如下:
    (1)支持桌面文件搜索,格式包括txt、doc、xls和ppt;
    (2)支持分词查询
    (3)支持全文搜索
    (4)能够高亮显示搜索关键字
    (5)显示查询所用的时间
    (6)显示搜索历史、过滤关键字


2、资源详情

项目难度:中等难度
适用场景:相关题目的毕业设计
配套论文字数:11851个字
包含内容:整套源码+完整毕业论文+答辩PPT+任务书+辅导视频+运行截图


3、关键词:

Web搜索引擎、信息检索、人机交互、Lucene全文检索引擎

4、毕设简介:

提示:以下为毕业设计的简略介绍,项目源码及完整毕业论文下载地址见文末。

绪论
1.1 项目背景
环球信息网(World Wide Web),即3W,一般在计算机与信息行业用Web这个词汇来来表示,万维网是它进入中国时所赋予的称呼,其实,这就是一个资料的汇集与存储的空间。

在这个空间中,以事物为单位,一个事物也可以称为一样“资源”,利用URL来标识,统一资源标识符”(URL。这些资源通过超文本传输协议(Hypertext Transfer Protocol,HTP)传送给终端用户,其中给到用户手上的是一个个链接,然后用户通过逐层点击链接,就可以查看到资源,也可以获得到资源。

各种讨论搜索引擎的文章、博客、杂志等席卷网络的相关信息。在这个信息化全面进入人们生活各层各面的时代,搜索引擎这项技术无疑会在最热门的技术中占有一席之地。

省略

1.2 国内外发展现状及分类
当今的时代,网络信息呈现指数型上升,其复杂性不言而喻,而网络检索技术的发展却不尽如人意,有很多方面的不足,具体阐述如下:

(1) 随着网页数量的迅猛增加,尽管是专业人员,他对所有的认知也存在不足,同时专业人员的工作量也很大,单凭人工操作,是没有办法对如此庞大的信息量进行有效的分类,更不用说是再加以检索和利用了。网络用户接触的是庞大对的、未经组织的信息,只是使用简单的关键词搜索,它对应的反馈给用户的结果冗余度较大且涵盖有限,这是让用户无法接受的。

(2) 信息实用性评价低迷。有些网站在网页中高频的出现某些关键字,从而轻易的被一些显著的搜索引擎收录,以此来提高该网站的知名度,但实际上它对用户是没有提供任何有价值的信息。

(3) 网络信息变更过快。如今的社会就是一个快节奏的社会,人们更多的喜欢是速食文化,即尽可能快的获取信息,可是分布式的信息布局,就算网络传输速度再快,要想实现实时的搜索难度堪比登天啊,即使是上一秒刷新过的网页,在下一秒就会有无尽的可能,时效性一直是人们追求网络信息的方向,但却很难做到真正的实时。

省略

1.3 本论文组织结构介绍
本次设计是在Lucene技术之上进行的开发,最终成功的设计出搜索引擎的全过程。从开始本次设计到最终的实现,都会在下述做详细的介绍:

第1章 绪论,本章主要从如下几个方面做了阐述:1、本次设计的系统所会面临的问题;2、怎么处理所面临的难题;3、攻克难题的详细内容;4、本次课题是基于什么样的研究背景、意义而进行;5、本次设计的可行性分析以及论文中各章节内容描述。

第2章 相关技术介绍,对涉及到的理论知识和用到的开发工具做相关阐述。

第3章搜索引擎的基本原理,详细介绍了搜索引擎的基本组成结构和工作原理。

第4章 搜索引擎系统的分析与设计,根据所需要实现的功能入手,一步步的完成设计目标。

第5章 搜索引擎系统的具体设计步骤,分步骤详细地表述了该设计的实现过程以及设计中会遇到的注意事项。

第6章 系统测试,对系统做了相关测试和评价说明。

最后:总结、致谢、参考文献。

2 相关技术介绍
2.1什么是搜索引擎
省略

根据搜集资源与提供给用户的方式进行区别,如今的搜索引擎可以划分为两类:
(1)目录式搜索引擎:按照人为地方案或者是半自动的工作模式去搜索信息,然后指定职业的工作人员查看信息,采取人工的方式对信息进行筛选,最终会把检索到的信息分类存放在指定的框架当中。这一类信息大多数是直接与网站进行交互的,只可以提供文档目录的查看以及直接检索的服务。由于这一类型的搜索引擎引入了人的智能的功能,所以提供的信息质量非常高,精确地匹配所检索的信息;但由于需要指定人员进行查看和分类,这无疑会使得信息的更新不够及时,而且信息量如此之大,会使得维护任务异常繁重。雅虎(yahoo!)就是这一类型的典型代表。

(2)机器人搜索引擎:利用蜘蛛 (spider)程序在互联网中进行自主的检索资源,通过索引器搜索的信息绘制索引表,索引器就是依照使用者的输入请求,查看索引库中的内容,最终将匹配到的结果显示出来,供用户查看。这一类型的服务方式是面向web的全文检索。该类搜索引擎相比于目录式的搜索引擎,省去了人工操作的环节,使得更新更加及时,而且由于是计算机自动进行查询,会使得查询得到的信息量大幅提升;但正是由于这样,会使得返回的信息匹配率相比于目录式检索会有所下降,用户所看到的信息过于庞大,还需自身进行筛选。由于其优点突出,目前,比较流行的搜索引擎大多数采取了这一种方式,这其中代表性最强的引擎有: google(谷歌)、Baidu(百度)、360、等等。

现在网络的搜索引擎也已经有不少,国际上比较著名的有Google(谷歌)等等。国内目前也建立了很多的搜索引擎,比如:百度、360、搜狐、新浪等。其中,在信息检索的准确率和全面性这两个指标上,做得较好有Google、百度。 同时搜索引擎的准确度及相关性还是有待科技人员进一步提高和完善的。

以Google为例再具体的阐述一下,它可以在检索信息时做到了快、准、狠。它最厉害的优势在于:1、超大容量的web存储空间。据保守估计,Google目前收录的Web网页总量己经高达80亿。2、响应速度及时。据数据显示,Google(谷歌)通常搜寻所用时间大致上小于0.3 s,这么卓越的性能是基于数百台高性能的硬件服务器以及谷歌公司所使用的的分布式并行查询的系统。3、反馈信息全面。据了解,Google查询反馈的信息不仅仅集中于各个大型热门网站,同时针对的是更多的特定的Web页面(即便是存放这些页面的网站很冷门),但正是由于这样,才会使得谷歌可以获取的信息,能够和使用者查找的请求具有较高的相关度、匹配性、准确度,Google(谷歌)不断发展改善的页面优先度程序和查询到的信息最优化的排序机制,使得谷歌能够在搜索引擎中处于佼佼者的地位。

2.2 sqlserver数据库
值得介绍的是,数据库是由一个个基本的表组成的,这些表包括约束、规则、索引、触发器、函数、默认值等其他数据库对象,同时这些数据库对象都是依附于表对象而存在的。用自己的概括数据库跟表的关系:数据库是分母(无限大),表是分子(一个表对应一个单位)。
本次设计,我采用的是sqlserver数据库,主要使用的是sqlserver 2008这款软件,它的最大的优势在于:
1)可以很快捷的添加删除修改数据;

2)它的图形化界面可以很快的建立表与表之间的联系图,一个表的外键关系可以很快地建立出来;

3)有很强大的安全机制,有自己的导入导出格式,很安全;

4)具有强大的功能,事务操作等等。

它也存在的缺点:在环境配置上要相较其他中小型的服务器要复杂一些,同时我们还知道sqlserver的语法跟mysql,orcale之间有一些像素也有一些不同,包括在转化为mysql或者orcale时都是有些差异的。

2.3 Tomcat服务器
Tomcat是一个轻量级的应用型服务器,它具有如下的优点:系统的扩展性能优越、服务器的性能非常稳定、服务器的源码开放,便于发烧友的研究与学习以及本身就带有的免费获取的机制,这都是导致Java技术研究人员里有一大批忠于Tomcat的人员。这款服务器还是目前相当流行的Web应用服务器。
我们都知道,Tomcat既是Servlet容器,还是独立的服务器,如果想要有动态泰德效果,需要把动态数据放在服务器上,基于java语言,Tomcat是一个容器,存放并且运行基于servlet的java程序,像我们熟悉的三大框架都是你可以在Tomcat跑起来的,我们通常会把写好的jsp的网站打包成一个压缩文件,然后放到服务器上,在浏览器中输入域名/网址就可以运行起来了,就可以实现跟数据库的连接,获取到动态数据。

3 搜索引擎的基本原理
3.1搜索引擎的基本组成及其功能
在这里插入图片描述

图3-1 搜索引擎的基本组成

由上图可知,搜索引擎程序可以化分为搜索器子程序、索引器子程序、检索器子程序以及用户接口子程序等模块;存储器以及存储桶是用来存储所检索到的各种资源的。

搜索引擎程序的组成结构具体如下:
l.搜索器 (Crawler)
搜索器,顾名思义,就是用于在互联网中探索、寻找信息,最终的目的是为了把信息存储在存储单元中的。这种计算机程序,需要日夜不停地处于运行的状态,为的是可以尽可能的更快地搜集更多的新信息,这些信息的种类是多种多样的,包括有HTML格式、XML格式、字处理文档格式以及多媒体信息等等,此外搜索引擎还需要定期更新存储器里的信息。
在这里插入图片描述

表3-1搜索引擎程序的组成结构表

如今,互联网已经进入了寻常百姓的家中,人们可以自由的发布信息,导致信息更新的很快,只有定时的更新网络上的信息,才能避免使用者搜索信息时的死连接或者是无效连接。现在我们考虑的搜集信息的策略有两种:
表3-2 搜集信息的策略
在这里插入图片描述

为了提高信息的发现以及信息的更新速度, 搜索器的实现方法通常会采用分布式、并行计算技术,这样就可以满足商业搜索引擎每天几百万网页的的信息发现了。

2.索引器(Indexer)
索引器,通过阅读所搜集的信息,并进行整理,将信息中的索引项生成索引表,同时还可以用索引项表示文档。索引项有客观索引项以及内容索引项之分:
表3-3 索引项的分类
在这里插入图片描述

为了对文档的内容进行区分,通常会给单索引项赋权值,这样就可以用单索引项进行区分了,而且还可以用来得出查询结果与查询目标的相关度。一般使用的方法有:统计学方法、概率学方法以及信息论法。短语索引项的提取,一般会采用统计学的方法或者是概率学的方法甚至是语言学的方法。

索引表,一般会采用由索引项去查找相对应文档的内容,这就是所谓的倒排表 (InversionList)。当然,索引表还会把索引项在文档中出现的位置也记录在表,目的是为了计算索引项之间的关系,究竟是相邻还是接近。

索引器的算法有两种:集中式、分布式,每一种算法都有优点,但也都有其缺点。当搜索的数据量巨大的时候,为了解决跟上信息量上升迅速的难题,必须采取即时索引 (InstantIndexing)的方式,一个漂亮的索引算法,随着索引器的搜索的数据的提升,其性能的优越性就会展露无遗。索引的质量的高低,有时就会完全决定搜索引擎的有效性。

3.检索器(Searcher)
依照用户的查询请求,搜索索引库并快速的检索出所需的文档,然后比较所查到的文档和查询请求之间的相关度评价。最终,根据相关度的高低,将输出的查询结果进行由高到低的排序,还可以实现用户相关性与搜索引擎之间的反馈机制。
检索器的设计,目前已有四种成熟的模型:
混合的模型、代数的模型、以及概率模型、集合理论模型。

4.用户接口(UserInterface)
搜索引擎,目的是为了让用户进行检索信息,所以必须有用户接口,这样才能实现人机交互,从而才能真正的体现搜索引擎的价值。用户接口就是用来进行,将用户的查询请求输入搜索引擎、显示用户的查询结果、更高级的可以提供用户相关性反馈机制,从而更好地实现搜索引擎,其所提供的信息的准确性、合理性等等。 有了用户接口,不仅方便了用户使用搜索引擎,而且使得用户可以更加的高效率、多方式地得到及时的信息。

用户输入接口我们可以分为两类,一种是简单接口,另外一种就是与之对应的复杂接口。

简单接口,就是最为平常的一种交互界面,使用者只能够输入查询信息,不能进行更加精确地查询,而且也没有反馈的功能;

复杂接口,不仅可以提供输入查询信息的文本框,而且使用者还可以对查询得信息进行限制,减小搜索空间,例如,使用逻辑运算符、使用相近、相邻的关系、域名的范围(如.cn、.com)、出现的位置 (如题目、关键字、作者、时间)、搜索文档的字数等等。中国知网、万方数据库等等,都可以提供上述限制,由于不同的公司所用的限制方式不同,会给用户的使用带来一些不便,当前就有一些公司与机构,正在着手制定查询选项的一系列标准。

3.2搜索引擎的详细工作流程
搜索引擎的详细软件内部构成和具体工作流程说明如下:
在这里插入图片描述

图 3-2 搜索引擎的内部构件

搜索引擎的工作原理:当我们在一个表单中输入要搜索的内容时,搜索引擎就会根据我们输入的内容在数据库中进行搜索,首先他会匹配各个网页中的头部信息中的关键字,如果这个网站中有这个关键字的话,就会匹配出来;如果没有的话,搜索引擎就会自动过滤掉。简单直白的说,搜索引擎的工作原理就是对已存在的一个大型数据库内的信息资源进行智能化的筛选过程,并将有效的结果反馈给用户。

在这一个过程中无论是谁家的搜索引擎,无论是百度还是谷歌还是雅虎都会采用自己的算法根据一些指标来进行判断,然后暗战关联度。高低从高到低排序。在这一过程中,需要我们在做网站的时候头部关键字部分还有超链接部分
还有在做完网站之后会引入一个文件以便收录,结合一些SEO技术,一个成功的网站是会在排名前五,而且通过一些合理的页面布局,利用不同的工具,还有超链接的设置要合理,避免垃圾链接无用链接。通过让搜索引擎爬你的网站,从而增加网站的流量,为各大站长带来收益。

我们通常会用好多指令查看某一个网站的浏览人数,但是对于每一个搜索引擎又各有各的算法,在百度适用的不一定在谷歌适用。典型的我们会通过查看看site://www.xxx.com 类型的网站,来了解某一个网站的浏览人数。

4 系统分析与设计
4.1系统分析
经过对搜索引擎的研究同时与Lucene自身的特性相结合,将本次设计所需要实现的功能阐述如下:
 支持桌面文件搜索,格式包括txt、doc、xls和ppt;
 支持分词查询
 支持全文搜索
 能够高亮显示搜索关键字
 显示查询所用的时间
 显示搜索历史、过滤关键字
分词查询与全文搜索这两项功能,我们都可以利用Lucene本身自带的库加上相关算法就可以完成设计了,为了使得关键字的高亮度这一问题得到解决,显然,我们需要利用Highlighter的辅助,通过数据库持久化保存数据。

4.2系统概要设计
在我们进行需求分析的时候,制定的用例以及领域模型都可以直接的带入到设计阶段,我们粗略设计的搜索引擎系统的构架如下:
在这里插入图片描述

图4-1 系统总体架构

4.2系统实现目标
希望实现一个可用于海量信息快速搜索的个性化引擎,它应该具有快速、便捷和精确等特性,并且能够一目了然而看到搜索耗时,关键字高亮度显示等等个性化效果。实现时希望不需要高配置的硬件资源以及复杂的环境配置或搭建,幸运的是开源Lucene库给我们提供了可能。

5 系统详细实现
5.1实现环境配置
因为我所选择的搜索引擎是基于Lucene的,所以需要利用Lucene的一些jar包,这样才能借助Lucene完成我们自己想要的搜索功能,并且为了实现分词,我们还需要引用分词组件的相关类库,具体的引用类库如图5-1所示:
在这里插入图片描述
图 5-1 Lucene配置

5.2功能实现
5.2.1 建立索引
Lucene对数据的检索是在索引文件中查找的,可能会有人问为什么不直接在数据中检索呢?一个是数据库检索要实现全文检索,实现分词是相当困难的,而且,如果数据量小只有几百几千倒是可以考虑用数据库检索。把数据从数据库里读取出来,写入索引文件的时候是一条一条记录的写入的。

由于Lucene只能替文本这一类型的数据组建索引,所以为了进行其他类型的数据进行检索,只能把其他的格式的数据用文本类型的替换,这样就可以进行索引、搜索了。如果需要对HTML文档进行索引的话,你就首先需要利用文本格式把 HTML文档替换,随后才可以将转化的结果输入 Lucene进行索引与检索,接着就会创建一份索引文件,我们需要把它保存到存储器里面,最终通过判断用户在UI界面输入的查询请求,从建立好的索引文件中查找。

实现代码:

/**   
* 为数据库检索数据创建索引   
* @param rs   
* @throws Exception   
*/    
    private void createIndex(ResultSet rs) throws Exception {
         
        Directory directory = null;     
        IndexWriter indexWriter = null;     
         
        try {
         
            indexFile = new File(searchDir);     
            if(!indexFile.exists()) {
         
                indexFile.mkdir();     
            }     
            directory = FSDirectory.open(indexFile);     
            analyzer = new IKAnalyzer();     
              
            indexWriter = new IndexWriter(directory, analyzer, true, IndexWriter.MaxFieldLength.UNLIMITED);     
            indexWriter.setMaxBufferedDocs(maxBufferedDocs);     
            Document doc = null;     
            while(rs.next()) {
         
                doc = new Document();     
                Field id = new Field("id", String.valueOf(rs.getInt("id")), Field.Store.YES, Field.Index.NOT_ANALYZED, TermVector.NO);     
              
               // Field title = new Field("title", rs.getString("title") == null ? "" : rs.getString("title"), Field.Store.YES,Field.Index.ANALYZED, TermVector.NO);  
                Field content = new Field("content", rs.getString("content") == null ? "" : rs.getString("content"), Field.Store.YES,Field.Index.ANALYZED, TermVector.NO);   
                doc.add(id);     
            
                doc.add(content);     
                indexWriter.addDocument(doc);     
            }                              
            indexWriter.optimize();     
            indexWriter.close();     
        } catch(Exception e) {
         
            e.printStackTrace();     
        }      
    }  

5.2.2 文件搜索实现
文件搜索首先需在设置系统一个搜索文件夹,然后把待搜索的文件放到该文件夹下面,接着输入关键字即可搜索,本系统目前支持搜索的文件格式包括.txt、.doc、.xls和.ppt.

在文件搜索之前需要建立索引,在建立索引的时候对性能影响最大的地方就是在将索引写入文件的时候, 所以在具体应用的时候就需要对此加以控制[4].

在读取文件夹下的文件时,我们是通过FileInputStream对象来完成这一操作的,该对象只需要有一个参数就可以啦,这个参数就是文件的存储路径,如果我们使用FileInputStream来读取文件的话,我们还需要通过利用BufferedReader对象,把文件转换成Buffered的形式存放,最后我们通过IndexSearcher对象来实现文件的搜索:

实现代码:

IndexWriter iwriter = new IndexWriter(directory, analyzer, true,
					IndexWriter.MaxFieldLength.LIMITED);
			iwriter.setMaxFieldLength(25000);
			// Lucene是不可以对除Document文件以外的文件建立索引的,Document只是一个假设文件
			while ((a = br.readLine()) != null) {
    
				Document doc = new Document();
				doc.add(new Field(fieldName, a, Field.Store.YES,
						Field.Index.ANALYZED));
				iwriter.addDocument(doc);
			}
			// Field.Store.YES:为该Field值创建索引
			// Field.Index.TOKENIZED:索引Field的值,使它能够被查到
			// Field 对象是用来描述一个文档的某个属性的
			iwriter.close();
			// 索引对象
			IndexSearcher isearcher = new IndexSearcher(directory, true);
			QueryParser parser = new QueryParser(Version.LUCENE_29, fieldName,analyzer);

在这里插入图片描述

图5-2 文件搜索效果图

5.2.3 数据库的连接配置
相关代码:
Class.forName(“com.microsoft.sqlserver.jdbc.SQLServerDriver”);
String url= “jdbc:sqlserver://localhost:1433; DatabaseName=LuceneDB2”;
String username = “qian”;
String password = “wqian”;
con = DriverManager.getConnection(url, username, password);

5.2.4 数据库搜索实现
本模块解决了数据库快速搜索的问题,这个问题其实与文件搜索的原理一样,第一步都是需要创建索引的,当文档的索引创建好之后,就能够进行搜索的任务了。
相关代码:

// 执行sql语句增删改
	public int updateExecute(String sql) {
    
		int result = 0;
		try {
    
			Connection con = getConnection();
			Statement sta = con.createStatement();
			result = sta.executeUpdate(sql);
		} catch (SQLException e) {
    
			e.printStackTrace();
		}
		return result;
	}

	// 执行sql查询语句 返回一个ResultSet
	public  ResultSet queryExectue(String sql) {
    
		ResultSet rs = null;
		try {
    
			Connection con = getConnection();
			Statement sta = con.createStatement();
			rs = sta.executeQuery(sql);
		} catch (SQLException e) {
    
			e.printStackTrace();
		}
		return rs;
	}
	public  String executeScalar(String sql) {
    
		ResultSet rs = queryExectue(sql);
		String s = "";
		try {
    
			while (rs.next()) {
    
				s = rs.getString(1);
			}
		} catch (SQLException e) {
    
			e.printStackTrace();
		}
		return s;
	}

这个时候,在前端页面上的用户提交一个关键字的查询请求,而后这个请求将会被自动进行分析处理。最终,系统会将用户的查询指令传输到后台中,并且把检索到的信息资源进行返回,前台一般为显示器,会将检索到的信息进行显示:
在这里插入图片描述

图5-3 检索结果显示图

5.2.5 后台数据编辑实现
管理员可以点击页面的“登录”链接到管理员登录页面,用户在登录页面输入账号和密码即可登录系统,登录后用户可以看到目前系统所有数据,同时也可以修改或者删除任何一条数据可以通过标题来搜索自己想看的数据,也可以通过添加按钮来添加新的数据:

在这里插入图片描述

图5-4 后台登录界面

6 系统测试
6.1测试重要性
该项目是在本地服务器上进行运行和调试,首先是对Java环境的安装及配置,以及对数据库环境的安装与配置,安装完毕后将文件导入根目录,以后才可以在浏览器上进行运行、测试。

在项目开发过程中,会遇到那种错综复杂的问题,所以,测试在软件开发过程中起到了至关重要的作用,它的影响力不比任何开发的环节低,因为软件的开发是一项巨大的工程,不仅耗时,而且开发人员也不可能会预料到所有可能出现的情况,这样就会导致每个时期都难免会产生一系列的错误,而测试人员的主要职责就是,检查与发现程序在运行的程中的错误;一个优异的测试用例,就说明这个测试用例可以有极大地概率找出系统中目前还没有被觉察到的错误;找出目前还没有觉察到的错误,这就是成功的测试的标准。本系统的测试和纠错信息流程如图6.1所示。
在这里插入图片描述

图6-1 测试和纠错信息流程图

软件测试,又称为多模块测试,一共有四个阶段:
表6-1 测试阶段的介绍表
在这里插入图片描述
在这里插入图片描述

图6-2 层次测试的信息流程图

6.2测试用例
通过输入关键字进行查询,然后根据搜索结果判断系统是否存在问题.
例:搜索“在”,反馈结果如图6-2所示:
在这里插入图片描述

图6-3 搜索结果图1
可见搜索结果是正确的,并且关键字都已高亮度显示。

结 论
本次设计主要就是通过利用Lucene技术,来实现搜索引擎的设计和实现的过程。其中用到了开源工具有MyEcipse(提供项目运行的Java环境,编写程序空间)、sql server2008(数据库,用户前端展示信息的支撑,是数据的存储地)、tomcat(服务器,用户提交检索请求,由它来进行接收、处理)他们分别管控的自身的部分,同时也相互协调配合,这一功能得以正常运行和实现,是缺一不可的。

本项目是对一个基于Lucene技术的搜索引擎设计与实现的过程,通过开源库Lucene的支持,快速地实现了海量信息的搜索功能,它不仅实现了文件快速查找的功能,而且还实现了全文搜索,还能实现类似百度的分词搜索效果,效果颇佳。同时加入了数据库处理。

该系统可以通过扩展或改造然后适用于站内搜索,这样可以使用户快速的找到自己想浏览的信息,提高用户体验和网站流量。
到此搜索引擎的基本功能都已基本完成,但是还有待改进或加强的地方,例如如果把分词做到最优最人性化,怎样分才是最合理,都需要进一步研究。

参 考 文 献
[ 1.] 李刚,宋伟,邱哲.征服Ajax+Lucene构建搜索引擎.北京:人民邮电出版社,2006.
[ 2.] 邱哲,符滔滔.开发自己的搜索引擎-Lucene2.0+Heritrix.北京:人民邮电出版社,2007.
[ 3.] 孙承杰.基于统计的网页正文信息抽取方法的研究.中文信息学报,2004,18(5):17-22.
[ 4.] http://www.docin.com/p-1436638591.html基于Lucene全文检索引擎的应用研究与实现.
[ 5.] 朱明.数据挖掘.合肥:中国科学技术大学出版社,2002.
[ 6.] Hu Y H, Li H, Cao Y B et al. Automatic extraction of titles from general documents using machine learning. Information Processing and Management, 2005, 42 (5):1276-1293.
[ 7.] 王德峰,李东.搜索引擎Google的体系结构及其核心技术研究.哈尔滨商业大学学报(自然科学版),2006,(01).
[ 8.] 吕平.基于Ajax的IP网络管理系统的研究与实现:(硕士学位论文).北京:北京交通大学, 2007.
[ 9.] 陈兵国.基于AJAX的网站设计与实现.福建电脑,2007,(12).
[ 10.] 张校乾,金玉玲,侯丽波.一种基于Lucene检索引擎的全文数据库的研究与实现.现代图书情报技术,2005.
[ 11.] 杨海东.基于Ajax技术的异步搜索引擎研究与实现:(硕士学位论文).南京信息工程大学,2007.
[ 12.] 周珍娟,张字平,陆玲.基于Lucene2.0的电子文献全文检索系统.电脑知识与技术(学术交流),2007.
[ 13.] 朱永盛,武港山.基于Web的新闻信息抽取.计算机工程,2006,32(10):74-76.
[ 14.] 刘迁,贾惠波.中文信息处理中自动分词技术的研究与展望.计算机工程与应用,2006.
[ 15.] 丁承.基于字表的中文搜索引擎分词系统的设计与实现.计算机工程,2001.

致 谢
省略


5、源码下载:

本项目源码及论文如下,有需要的朋友可以点击进行下载。如果链接失效可点击下方卡片扫码自助下载。

序号 毕业设计全套资源(点击下载)
本项目源码 基于java+Lucene+Tomcat的搜索引擎设计与实现(源码+文档)JAVA_Lucene_Tomcat_搜索引擎.zip
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_66238867/article/details/125412048

智能推荐

ionic tabs_tabs ionic-程序员宅基地

文章浏览阅读417次。https://ionicframework.com/docs/ionicons/搜索图标原文链接:http://blog.maptoface.com/post/124_tabs ionic

Java统一异常处理--实战篇-程序员宅基地

文章浏览阅读4k次,点赞2次,收藏20次。文章目录背景什么是统一异常处理目标统一异常处理实战用 Assert(断言) 替换 throw exceptionAssert善解人意的Enum定义统一异常处理器类异常处理器说明handleServletExceptionhandleBindExceptionhandleValidExceptionhandleBusinessException、handleBaseExceptionhandleException异于常人的404统一返回结果验证统一异常处理主要代码开始验证捕获自定义异常捕获进入 Control_java统一异常处理

python字符串处理之数字求和_python处理字符串:将字符串中的数字相加求和-程序员宅基地

文章浏览阅读916次。计算字符串中所有数字的和,字符串中有数字和字母组合而成如果出现连续数字,按照一个数操作具体解释在代码行里:def sum_str(str1):len1=len(str1) #首先将字符串str1的长度赋值给len1sum = n = 0 #建立一个值为0的空变量sun #建立一个值为0的空变量nfor i in range(len1): ..._输入一个只包含数学宇符的字符品输出字符串对应的数字总和

阿里云服务器上搭建Discuz论坛_如何用阿里云搭建dz-程序员宅基地

文章浏览阅读8.7k次。前沿: 搭建discuz论坛,需要搭建软件环境(也就是其运行的环境)本实例采用的是XAMMP软件站集成环境目的:搭建Discuz3论坛搭建步骤: 第一步:下载XAMPP(Apache+Mysql+PHP+RERL)百度云下载地址:XAMPP点击下载 windows到服务器之间的文件传输采用xftp; 终端shell软件采用xshell,然后将下载的x_如何用阿里云搭建dz

百度地图api离线开发(示例源代码)_百度地图离线api-程序员宅基地

文章浏览阅读5.8k次。相关教程: 1、如何搭建WEB离线地图开发环境 2、下载离线地图数据(金字塔瓦片数据) 3、离线地图二次开发接口(离线地图API) 4、离线地图API接口实例DEMO 5、离线地图完整演示实例说明:1.当前版本支持 谷歌电子/卫星地图瓦片、高德地图、阿里云地图、超图、腾讯地图等(只需下载该地图源的瓦片拷贝到指定目录即可);2.效果预览演示地址:..._百度地图离线api

ubuntu20.04.3安装Qt6.22操作步骤_ubuntu安装qt6-程序员宅基地

文章浏览阅读1.1w次,点赞5次,收藏37次。ubuntu20.04.3安装Qt6.22 LTS的操作步骤_ubuntu安装qt6

随便推点

HTML+CSS+JS实现 ️制作loading动画效果️_js实现好看的loading效果-程序员宅基地

文章浏览阅读1.1k次,点赞3次,收藏9次。???? 作者主页:Java李杨勇???? 简介:Java领域优质创作者????、Java李杨勇公号作者 简历模板、学习资料、面试题库、技术互助【关注我,都给你】???? 欢迎点赞 ???? 收藏 留言 ???? 效果演示:文末获取源码代码目录:主要代码实现:CSS样式:.load1 .loader,.load1 .loader:before,.load1 .loader:after { background: #FFF; -w_js实现好看的loading效果

嵌入式基础知识总结_嵌入式软件基础知识点总结-程序员宅基地

文章浏览阅读7.2k次,点赞16次,收藏80次。提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、选择题二、填空题三、简答题四、综合题2.读入数据总结前言 本篇为嵌入式知识点总结,花费了大概一两天时间整理的,现在分享给大家!!!一、选择题1.以下哪个不是嵌入式系统的特点?( )A.面向特定应用 B.高质量高可靠 C.可裁剪性 D.具备二次开发能力 解析:嵌入式系统本身不具备二次开发能力,即_嵌入式软件基础知识点总结

[学习] 鸿洋大大的万能适配器(1)_鸿洋 commonadapter-程序员宅基地

文章浏览阅读953次。总结一下从 ViewHolder 开始学习public ViewHolder(Context context, View itemView) { super(itemView); mContext = context; mConvertView = itemView; mViews = new SparseArra..._鸿洋 commonadapter

数据集下载-程序员宅基地

文章浏览阅读3.6k次。数据集下载_数据集下载

Android APK反编译就这么简单 详解(附图)_[置顶] android apk反编译就这么简单 详解(附图)-程序员宅基地

文章浏览阅读343次。在学习Android开发的过程你,你往往会去借鉴别人的应用是怎么开发的,那些漂亮的动画和精致的布局可能会让你爱不释手,作为一个开发者,你可能会很想知道这些效果界面是怎么去实现的,这时,你便可以对改应用的APK进行反编译查看。下面是我参考了一些文章后简单的教程详解。(注:反编译不是让各位开发者去对一个应用破解搞重装什么的,主要目的是为了促进开发者学习,借鉴好的代码,提升自我开发水平。)_[置顶] android apk反编译就这么简单 详解(附图)

正点原子DS100拆解全过程-硬件工程师必备-程序员宅基地

文章浏览阅读4.2k次,点赞4次,收藏18次。前言:之前一篇只针对正点原子DS100手持示波器的使用介绍文章。可作为一个电子工程师,光使用不是我们的风格哈,我们还要拆开看看电路。开拆外壳首先,看下图,DS100不是使用螺母进行固定的,而是通过结构上的卡扣进行固定,所以大家拆的时候要小心,别拆开之后,卡扣都坏了。顺手再提一句,其实我这次开拆也是准备修它呢?因为电源按键在我使用的时候,因为过于使劲导致焊锡松动了。所以准备补点焊建议经过拆卸之后,发现受损按键的部分是全靠焊盘和焊接的连接支撑受力,所以当使用者稍微使劲按压,这个键极易被损坏._ds100拆解

推荐文章

热门文章

相关标签