当前位置: 首页 > 工具软件 > Swish-e > 使用案例 >

swish-e代码分析,索引部分(5)

夏俊人
2023-12-01

在前一节中通过getentry函数的处理,在hash表中查找是否含有该词条,如果没有,则初始化一个词条entry变量。然后通过addentry进行处理。

2.3.4 addentry函数分析

加入词条到hash表的过程主要分为两部分:已有词条、新词条。

如果是 hash 表中未出现的词条。 在这个过程中写入了频率和位置信息(位置信息含有 strcuture 结构信息,便于在以后的压缩过程中处理);先将这些 TP 位置信息放在 currentChunkLocationList 链表中。


                        addentry代码片段1



  • 如果是entry首次被索引,在getentry函数处理时频率为0,对于LOCATION进行初始化,即,保存位置信息;
  • 在Location位置中写入文件的filenum、meta、具体位置,然后在entry中加入LOCATION,同时也写入频率;
  • 通过这gentry和addentry处理以后,词条包含了所在的meta、频率、位置信息等,然后将词条写入到hash表中。


在原先的 hash 表中出现的词条,则需要判断是否属于同一个 field (mata)和file中的词条。如果是,直接在 Location 中增加位置信息,否则需要在增加 Location 结构保存。 在处理 Location 位置信息时,需要考虑随着位置信息的逐渐增加,需要扩容位置信息。

                      addentry代码片段2

  •   如果不是第一次的 entry ,则需要在原先 entry 数据的基础上面,进行一些修改。此时需要在在 entry Location 结构中查找改 entry metaID filenum 是否一致,即:是否在一个属性中出现的关键字,如果是同一属性(比如: txt 文本中,属于一个文件中的)。此时,只需要修改一个 Location 中的 position 数组的值;

 

  •    如果需要增加 Location 扩展 posdata 数组时,可能会重新分配内容;

 

  •    果此时的该 entry 出现的位置不同,即:不在同一个 filenum 同一个 metaID 中的,则需要增加一个 LOCATION 结构在 ENTRY currentChunkLocationList 当中,即:增加不同的 Location 位置;

 

  • 每个 LOCATION保存了一个词条在相同meta、相同文件中的位置信息。

如果发现不在同一个meta或者文件中,则需要在建立一个LOCATION结构保存新的位置信息。

                        addentry代码片段3

 

 类似资料: