论文部分内容阅读
随着互联网技术的飞速发展和互联网应用的不断普及,互联网资源成为当前规模最大、内容最丰富、使用最广泛的信息来源。为了有效地从这些海量数据中检索到需要的信息,搜索引擎已经成为向用户提供快速资源定位的最好技术手段。然而,不断增长的网页规模和查询请求使得搜索引擎面临着巨大的性能挑战。面对海量的网页数据和巨大的查询需求,如何高效地处理查询请求成为搜索引擎领域中最重要的研究问题之一。在查询性能上的任何提升都可以显著地降低系统硬件资源的投入并提升用户的查询体验,从而为搜索引擎的良好运行提供坚实的基础。因此,本文主要研究提高搜索引擎效率的方法,并重点从倒排索引压缩和查询两方面技术结合的角度出发来解决制约搜索引擎系统性能的问题。本文的主要研究成果如下:(1)为了提升搜索引擎系统索引数据的压缩性能,本文研究了典型的Simple9索引压缩算法。针对Simple9压缩算法中存在的填充模式间可压缩整数个数的稀疏问题,本文提出了密集填充技术(Dense Padding)来使一个32位机器字能够压缩更多的整数,从而提升Simple9索引压缩算法的压缩率。当某一填充模式中异常值的相对位置大于下一个填充模式的可压缩整数个数时,我们通过在被压缩整数序列末尾插入整数0来构造满足本填充模式的可压缩整数序列。在解压过程中,我们设计巧妙的算法来去除额外的整数0。此外,针对Simple9中可压缩数字序列个数较少的导致的位操作过多问题,本文提出了分组Simple9压缩技术(GroupSimple9)来降低压缩和解压缩过程中的数据读取、分支判断、移位和查找映射表等位操作,从而提升Simple9压缩算法的压缩和解压速度。实验结果表明,本文提出的分组Simple9和密集Simple9(DenseSimple9)压缩算法能够在压缩率、压缩和解压三方面上均有明显的性能提升。(2)为了提升搜索引擎系统索引数据的查询性能,本文研究了当前流行的MaxScore动态剪枝算法。由于当前MaxScore查询算法是在必要表(Essential Lists)中进行选择候选文档,非必要表(Non-essential Lists)的倒排项仅进行分数贡献累加。MaxScore查询算法对必要表的访问是顺序进行的,而仅仅对非必要表采用随机访问,这种情况下MaxScore查询算法存在着严重的候选文档失效问题。针对这一问题,本文首先实现了一种多层自索引结构(Hierarchical Self-index)来支持倒排链表的随机访问,然后提出对候选文档最大可能分数进行双向检查,实现了必要表的快速跳跃访问(Essential Lists Skipping,ELS)。这样实现必要表中候选文档的预先检测和随机访问,使得候选文档的打分失效问题能够尽早被发现,避免在将要失效的候选文档上的一些无用的操作。实验结果表明,本文提出的ELS-MaxScore查询算法能够大大提升top-k查询性能,尤其在查询长度小于4时能达到MaxScore近2倍的性能。(3)通过之前的分析可以发现提升搜索引擎查询性能的一个方法是,候选文档的选择应该主要集中在重要度较高的词项对应的倒排链表中。在分析WAND查询算法问题和研究激进式MaxScore(Aggressive MaxScore)优势的基础上,为了更好的利用词项重要度这一重要特性,本文提出了最大重要度优先(Largest Score First,LSF)查询算法。LSF查询算法使得具有较高重要度的查询词项所指向的倒排链表能够优先得到处理。分析表明,LSF查询算法能够解决当前(Document At A Time,DAAT)和(Term At A Time,TAAT)两种穷尽遍历算法中存在的候选文档随机选择和内存消耗问题。为了进一步支持高效的动态剪枝算法,本文利用LSF查询的对于词项重要度考虑的优势,提出了两种精确的动态剪枝算法:基于LSF的去除查询词项技术(Term Omitting,LSF_TO)和基于LSF的文档部分打分技术(Partial Scoring,LSF_PS)。基于TREC GOV2上的实验结果表明,本文提出的两种基于LSF索引遍历的动态剪枝算法能够达到比基于DAAT索引遍历的WAND和MaxScore两种动态剪枝算法更好的查询性能。