Skip to content

hakureiR-eimu/SearchEngineBasedOnMemory

Repository files navigation

基于内存的搜索引擎设计与实现

实现一个基于内存的英文全文检索搜索引擎,需要完成以下功能:

功能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注释。

3: 使用统一的测试文档集合、统一的搜索测试案例对代码进行功能测试,构建好的索引和基于统一的搜索测试案例的检索结果最后输出到文本文件里。

About

搜索引擎实现

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages