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

一直想将swish-e的代码分析进行整理,趁着国庆,发布其中的内容,尽快地整理好。用的是swish-e 2.4.7版本。


先对于SWISH-E搜索引擎中的主要数据结构进行介绍。

1. 索引相关的主要数据结构

1.1 SWISH-E定义了SWISH结构对于索引,搜索过程进行处理,其中有MOD_Index结构 

    

 

struct MOD_Index

{

    /* entry vars */

METAIDTABLE metaIDtable;

/*文档中的词条(ENTRY)分析完成后,将它们拷贝到entryArray中进行排序处理*/

ENTRYARRAY *entryArray;

/*保存词条的hash*/

    ENTRY  *hashentries[VERYBIGHASHSIZE];

    char    hashentriesdirty[VERYBIGHASHSIZE]; /* just a 0/1 flag */

 

    /* Compression Work buffer while compression locations in index ** proccess */

    unsigned char *compression_buffer;

    int     len_compression_buffer;

    /*worddata保存了在写入索引文件之前,词条位置信息等*/

unsigned char *worddata_buffer;  /* Buffer to store worddata */

}

1.2 词条ENTRY结构

    将文档中的内容解析以后,形成单个的词条,然后统计出现的频率、文件、位置等。

Typedef struct ENTRY {

struct ENTRY *next;

/*出现在文件中的频率*/

int tfrequency;

/*词条出现的位置信息*/

    LOCATION *currentChunkLocationList;

LOCATION *currentlocation;

/*信息经过压缩以后,存放到这个链表中*/

    LOCATION *allLocatioinList;

struct {

   /*wordID存放了该词条在索引文件中的偏移*/

          Sw_off_t wordID;

int last_filenum;

}

/*存放词条的内容,word字符串*/

    char word[1];

} ENTRY;

1.3 词条位置信息LOCATION结构

typedef struct LOCATION

{          

struct LOCATION *next;

/*所在的metaID(如果是纯文本,则是1*/

int     metaID;

/*所在文件编号*/

int     filenum;

/*在该文件内词的频率*/

int     frequency;

/*posdata数组,具体的位置数组*/

    unsigned int     posdata[1];

}          

LOCATION;

你可能感兴趣的:(数据结构,struct,buffer,performance,代码分析,compression)