目录
一、 需求分析 - 0 -
1. 题目要求 - 0 -
2. 需求分析 - 1 -
二、 系统设计 - 2 -
1. 概要设计 - 2 -
2. 详细设计 - 3 -
(1) 相关存储结构 - 3 -
(2) 过滤器 - 5 -
(3) 查询 - 6 -
三、 软件开发 - 8 -
四、 软件测试 - 8 -
五、 特点与不足 - 9 -
1. 技术特点 - 9 -
2. 不足和改进的建议 - 10 -
六、 过程和体会 - 10 -
1. 遇到的主要问题和解决方法 - 10 -
(1) 对于Filter的实现 - 10 -
(2) 对于分数的设置 - 10 -
2. 课程设计的体会 - 10 -
七、 源码和说明 - 10 -
1. 文件清单及其功能说明 - 10 -
2. 用户使用说明书 - 11 -
3. 源代码 - 11 -
一、需求分析
1.题目要求
实现一个基于内存的英文全文检索搜索引擎,需要完成以下功能:
功能1:将指定目录下的一批.txt格式的文本文件扫描并在内存里建立倒排索引,这里面包含必须的子功能包括:
(1)读取文本文件的内容;
(2)将内容切分成一个个的单词;
(3)过滤掉其中一些不需要的单词,例如数字、停用词(the, is and这样的单词)、过短或过长的单词(例如长度小于3或长度大于20的单词);
(4)利用Java的集合类在内存里建立过滤后剩下单词的倒排索引;
(5)内存里建立好的索引对象可以序列化到文件,同时可以从文件里反序列化成内存里的索引对象;
(6)可以在控制台输出索引的内容。
功能2:基于构建好的索引,实现单个搜索关键词的全文检索,包含的子功能包括:
(1)根据搜索关键词得到命中的结果集合;
(2)可以计算每个命中的文档的得分,并根据文档得分对结果集排序;
(3)在控制台显示命中的文档的详细信息,如文档的路径、文档内容、命中的关键词信息(如在文档里出现次数)、文档得分;
功能3:基于构建好的索引,实现二个搜索关键词的全文检索。包含的子功能包括:
(1)支持这二个关键词的与或查询。与关系必须返回同时包含这二个单词的文档集合,或关系返回包含这二个单词中的任何一个的文档集合;
(2)可以计算每个命中的文档的得分,并根据文档得分对结果集排序;
(3)在控制台显示命中的文档的详细信息,如文档的路径、文档内容、命中的关键词信息(如在文档里出现次数)、文档得分;
功能4:基于构建好的索引,实现包含二个单词的短语检索,即这二个单词必须在作为短语文档里出现,它们的位置必须是相邻的。这个功能为进阶功能。
除了以上功能上的要求外,其他要求包括:
(1)针对搜索引擎的倒排索引结构,已经定义好了创建索引和全文检索所需要的抽象类和接口。学生必须继承这些预定义的抽象类和和实现预定义接口来完成实验的功能,不能修改抽象类和接口里规定好的数据成员、抽象方法;也不能在预定义抽象类和接口里添加自己新的数据成员和方法。但是实现自己的子类和接口实现类则不作任何限定。
(2)自己实现的抽象类子类和接口实现类里的关键代码必须加上注释,其中每个类、每个类里的公有方法要加上Javadoc注释,并自动生成Java API文档作为实验报告附件提交。
(3)使用统一的测试文档集合、统一的搜索测试案例对代码进行功能测试,构建好的索引和基于统一的搜索测试案例的检索结果最后输出到文本文件里作为实验报告附件提交。
(4)本实验只需要基于控制台实现,实验报告里需要提供运行时控制台输出截屏。
关于搜索引擎的倒排索引结构、相关的抽象类、接口定义、还有相关已经实现好的工具类会在单独的PPT文档里详细说明。同时也为学生提供了预定义抽象类和接口的Java API文档和UML模型图。