倒排索引

1. 倒排表

倒排表既用于通常全文查询目的。在索引目录下,以”_数字”开始的一系列文件都属于倒排表,其组成部分有4:词表,Doc-Freq索引,位置信息,元数据。

1.1 词表

对应于索引目录下的 “_数字.voc”。词表是一系列按照TermID大小排序的条目,每条目包含一系列TermID对应的信息,如IDF,CTF(该属性所有包含该TermID的频率值),以及指向索引数据的指针。

1.2 Doc-Freq索引

对应于索引目录下的 “_数字.dfp”,用于存储对应某TermID的Posting信息,仅包含DocID和Term Freq信息,后者代表该TermID位于该Doc中的频率信息。

1.3 位置索引

对应于索引目录下的 “_数字.pop”,用于存储某TermID的Posting信息,仅包含该TermID在某Doc中的所有位置信息。 位置索引必须和Doc-Freq索引一起使用。

1.4 元数据

倒排表由一系列桶组成。拥有相同”_数字”前缀的文件代表一个索引桶。索引桶越多,查询性能越受影响,因为需要同时打开多个桶,然后每个桶的结果需要合并。元数据主要用于表示桶信息,存放在单独的”barrel”文件里,为XML格式,里边包含桶个数,以及每个桶包含的文档数。

2. 实时索引

2.1 介绍

通常情况下, SF1R为新添加的SCD文件在磁盘上创建一个桶,并将建立好的索引数据写入到该桶中。

如果将索引设置为实时索引,则系统将新建立的倒排表保存在内存中,而无需立刻flush到磁盘中。在SF1系统中,有如下方法将索引设置为实时索引:

  • 在将sf1config.xml索引配置中设置为实时索引,设置方法如下:
<IndexStrategy memorypoolsize="128000000" indexlevel="wordlevel" indexpolicy="Realtime" mergepolicy="memory" cron="0 4 1 1 *" autorebuild="y"/>
  • 当待索引的SCD文件大小小于特定大小时,例如50M, 系统将该索引设置为实时索引。

2.2 binlog

由于实时索引存放在内存之中,当系统崩溃或者断电时会导致这部分索引数据的丢失。因此,有必要在建立实时索引时将其日志文件记录到binlog文件中。

以.binlog为后缀的文件为binlong文件。系统支持binlog时,在Sf1r关闭时,实时索引文件不必flush到内存中,在sf1r重新启动时,在从binlog中读入实时索引内容。 当实时索引的数据达到一定量时,才将其flush磁盘中,同时删除binlog文件。