前言
今天学长在这里向大家分享一个非常优质的毕设项目:基于Java的搜索引擎系统实现。
毕设帮助,开题指导,资料分享,疑问解答(见文末)
项目获取方式:
https://blog.csdn.net/fawubio/article/details/125236987
搜索引擎(Search Engine)是指根据一定的策略、运用特定的计算机程序从互联网上搜集信息,在对信息进行组织和处理后,为用户提供检索服务,将用户检索相关的信息展示给用户的系统。搜索引擎包括全文索引、目录索引、元搜索引擎、垂直搜索引擎、集合式搜索引擎、门户搜索引擎与免费链接列表等。
1 什么是搜索引擎
随着Web信息的爆炸型增长,Web型搜索引擎的设计就被提上了日程,大约是从上世纪90年代开始,逐渐的逐渐发展起来。实际上,本次设计的就是一种在互联网上,专门给用户提供各种查询信息服务的网站,它以自己特定的方式在互联网中寻找信息,并且把信息提取出来,然后再进行理解信息,把信息重新组织以及信息的加工处理,并反馈给用户的服务,从而达到信息资源导航的目的。用户可以通过自由词、关键字、等方式进行查询,也可以利用全文进行检索,或者根据类别进行搜索,甚至还可以加入一些特有的信息进行限制,例如名字、性别、出版社、序列号等等。
如今搜索引擎提供的信息资源导航服务已发展成互联网上非常重要的网络服务之一,搜索引擎网站也被称之为 “网络门户”。
如何实现一个搜索引擎
搜索引擎原理
由上图可知,搜索引擎程序可以化分为搜索器子程序、索引器子程序、检索器子程序以及用户接口子程序等模块;存储器以及存储桶是用来存储所检索到的各种资源的。
搜索器
即蜘蛛((Spider)程序,它无时无刻不在运行,主要任务是从因特网上搜集各种的信息资源,然后通过压缩处理等手段,使其占用空间变小,最终存到存储库里,为日候的用户检索做准备。
索引器
把存储库里的信息提取出来,进行识别与分析,根据结果进行分类,然后再建立索引,并进行简单的排队,把结果放在恰当的硬件存储单元里,也就是上文提到的存储桶。
检索器
当用户进行查询的时候,检索器会通过判断用户输入的请求,在存储桶中进行查找,将查到的结果,根据匹配度、优先度等指标进行最终的排序,呈现给用户最好的结果。
用户接口
是用户与搜索引擎进行人机交互的界面,既可以用于输入用户的请求,也可以用来返回查找的结果,供用户选择。
系统实现
这里学长给出本设计的工作流程图
搜索引擎的工作原理:当我们在一个表单中输入要搜索的内容时,搜索引擎就会根据我们输入的内容在数据库中进行搜索,首先他会匹配各个网页中的头部信息中的关键字,如果这个网站中有这个关键字的话,就会匹配出来;如果没有的话,搜索引擎就会自动过滤掉。简单直白的说,搜索引擎的工作原理就是对已存在的一个大型数据库内的信息资源进行智能化的筛选过程,并将有效的结果反馈给用户。
部分实现代码
/**
* 为数据库检索数据创建索引
* @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();
}
}
项目获取方式:
https://blog.csdn.net/fawubio/article/details/125236987