论文部分内容阅读
索引更新是搜索引擎的关键技术之一。以往动态文档集合下的索引更新策略的研究主要针对文档的插入和删除。对于文档的插入,索引更新的基本思想就是首先对插入的文档建立内存索引,然后在内存溢出或达到某个阈值时根据相应的算法进行更新;对于文档的删除,则是当索引中的垃圾记录达到某个阈值时进行垃圾回收;对于文档的修改,只是简单地把其看成文档删除再插入的过程。
然而,对于桌面搜索而言,其文件系统中的文档集合是高度动态的,除了文档的插入和删除外,文档的修改操作也频繁发生。传统的针对文档修改的索引更新策略由于对整个文档重新构建索引,因此带来低效的索引更新性能。针对这些特点和弊端,进行细粒度的索引更新,即只对文档中改变的内容进行更新,就显得尤为重要。此外,要进行索引更新,桌面搜索的索引进程需要捕捉到文件系统中发生的变化。然而,现有典型的Linux文件系统变化通知机制由于存在诸多缺点不能满足桌面搜索细粒度索引更新的要求。
本文针对高度动态文档集合,特别是文档修改的索引更新问题来展开研究。取得的创新性成果主要包括以下几个方面:
1)深入分析了典型的Linux文件系统变化通知机制dnotify和inotify,对其实现和存在的不足分别进行了详细的论述,并进行了比较。
2)实现了一种支持细粒度索引更新的Linux文件系统变化通知机制nnotity,克服了典型通知机制的缺点,支持递归监控,并提供详细的文件系统事件信息。
3)在nnotify的基础上,提出了针对动态文档集合的索引更新策略,尤其对于文档的修改,进行了细粒度的索引更新。实验证明,该策略在保证查询性能的前提下,提高了索引更新的性能。