在信息检索过程中,文本数据首先要经过加工处理后才能被检索到,而这个加工处理过程就是建立索引文件(通常是倒排索引文件)的过程。一般的信息检索过程是用户通过接口提交查询请求,在索引文件中检索出相关结果,并按相关度排序之后返回给用户。可见,建立文档索引是最基础的加工过程。由于检索通常要面向大量用户的查询,因此索引文件的设计要尽量高效,以便由索引项快速定位到相应文档。当前文档索引方法有倒排索引、后缀数组索引、签名文件索引等,其中倒排索引是应用最广泛的。在Elasticsearch中,采用的就是经典的倒排索引技术。目前成熟的信息检索系统几乎普遍采用这种索引方法。可以说,倒排索引是检索技术的基础。
倒排文件可看作是一种描述了一个词项集合TERMS元素和一个文档集合DOCS元素对应关系的数据结构。若记N为文档集合的大小,M为词项集合的大小,DOCS={d 1 ,d 2 ,…,d N },TERMS={t 1 ,t 2 ,…,t M },则倒排文件可给出t j 出现在哪些d i 中(或t j 在d i 中出现在哪些位置)的信息。一般地,它从逻辑上看可分为两个部分:一部分用于表示文档的索引项;另一部分则由多个位置表组成,每个位置表和索引中的某个索引项相对应,并记录所有出现过该索引项的文档及其在文档中的具体位置,以便计算出索引项之间的相邻关系。图2.1是一个倒排索引结构示意图,表示在文档d 1 和d 2 中出现过“应用”这个索引项,而在文档d 2 和d 3 出现过“技术”索引项。由于d 2 文档中上述两个索引项是相邻的(分别位于51和52位置,见图2.1),因此“应用技术”就会出现在d 2 文档中。如果要检索“应用技术”一词,则首先在倒排索引中找到包含“应用”一词的候选文档集,然后从候选文档集合中筛选出在这个检索词后紧跟“技术”的文档(是d 2 ,而非d 1 或d 3 )。这种方式可以加快检索速度 [17] [18] 。
图2.1 倒排文件示意图