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

本文详细介绍了SWISH-E搜索引擎中的关键数据结构,包括MOD_Index结构、ENTRY词条结构及LOCATION位置信息结构,为理解其索引和搜索机制提供了基础。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一直想将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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值