高效分布式索引

检索系统的高效分布式索引子系统具有低膨胀率、高度并发、高度可扩展等特征,由文本预处理、索引创建、索引更新、索引删除四个功能模块。

文本预处理

为了降低有效文本的大小,有效利用存储空间,优化检索效率,需要对待检索文本进行预处理。待检索文本中所含有的并不全部是中文,可能含有英文字符、其它外语字符、或者一些特殊的符号,针对这些特殊字符创建索引的过程以及检索的策略与中文字符不同。针对待检索文本创建索引时需要将这些特殊的字符分离出来,分别对其进行索引的创建。

除了将其它的特殊字符,外文字符分离出来,在索引的创建时还有一个很重要的问题,即停止词 (stop word)的处理,这些词并没有实际的意义,但是在文本中却大量的存在,比如中文字符中的 “的”,“是”,“得”等,英文中也有类似的词 “and”,“is”还有动词的过去式,过去分词等。这些词在文本中出现的概率很大,总量很多。但是其对实际的检索意义不是很大,若要是对这些词全部建立索引,将会耗费很多资源,所以在索引创建之前将这些停止词移除。停止词是根据已有的停用词表进行设定。在具体处理时采用的策略是扫描文本时判断该字符是否为停止词,若是直接跳到下一个词进行处理。

索引创建

通过读取文档的文本信息,按照系统索引的结构进行解析、存储,方便查询系统的使用。系统为检索与索引服务器交互次数及内网网络资源压力使用批量模式创建索引。在索引创建过程中,会对待检索文本先进行停用词去除,检索系统中IK分词器,并且加入了丰富的词典,如区域词典、人物词典、搜狗词典等丰富的词典,以保证分词的准确性。

索引更新于删除

书籍、章节、多媒体资源等更新或者删除后,系统通过数据库的资源的更新时间和删除备份表的删除时间对索引做到准实时更新。

索引压缩

随着数据的积累,我们不能以无限制的扩大内存空间,来提升搜索性能。我们可以最大限度的减小索引文件的大小,实现每次读入到内存中有效的索引信息的增加。索引的创建的最终目的还是为了检索效率的提高,但是我们知道一个文本的索引是远远大于该文本本身的大小,在信息检索时,理想的情况是可以将整个索引文件放入内存中,提供各种的需要的信息检索。但是这在实际情况中是不可能的,原因有两个:

1) 索引文件太大,由于需要记录每个文档中每个字符的位置,以及该文档的文档号和链接指针的相关信息,导致索引文件比原来的文本集大很多。用膨胀率来表示源文本集的大小与索引文本大小的关系。

2) 由于内存相比硬盘其造价要高很多,在目前的情况下足够大的内存空间还是不可能满足的。