Hubble.net 搜索引擎分析二

1.       Hubble.Net运行机制

根据第一章知识,我们知道Hubble.Net系统只存储索引信息,而索引文档另存储于数据库中。.我们知道Hubble.Net采用的是倒排索引技术,索引词关联文档信息。所以索引词成为系统的关键点。根据索引词建立对应的索引信息和查询索引信息。现在我们来重点分析.hdx.idx类型文件,以及其在系统中的表现形式和整个系统的运行机制。

1.索引的建立是根据数据索引列。系统在创建Table时,会根据用户指定的数据索引列创建对应的索引文件。假如一个Table中有三列{title(索引类型Tokenized,url,content(索引类型Tokenized)}。系统会为此表自动添加两列,最终为{id(文档ID,记录插入数据库时,自动生成。系统中所有关于文档ID 的值都来与此),title,url,content, Score(文档的分数) }。此表最终{ title , content }两数据列需要建立其各自的倒班索引对象,用列名来区分。而且倒排索引对象建立各自的索引文件,文件名由7个数字加列名组成({d:7}+fieldname)

2.倒排索引文件包含自己独立的索引词列表。当新建一个文档(记录)索引时,首先对其值进行分词,分别判断结果词是否已在索引词列表中,如果在就更新其对应的索引信息,如果不在就添加其到索引词列表。以此维护其自身的索引词列表,以便查询是使用。

3.系统搜素时,查询命令格式:fieldname command 词语 词语 词语 。查询命令以空格隔开。fieldname为列名,表示需要查询那一列索引。Command为查询方式。现在系统中已有三种查询方式:FullTextQuery、MatchQuery、MutiStringQuery。词语为用户指定的查询词,可以多词语查询。系统根据fieldname,获取对应的倒排索引对象,在根据倒排索引对象内部的索引词列表,查询“词语”,其结果根据command类型,组合结果,并最终返回给用户。

4.系统运行时,首先根据配置文件初始化:索引目录、IQuerys、IAnalyzers、IDBAdapters、数据表(Tables,一个表对应一个DBProvider对象。)、然后在根据表配置信息初始化倒排索引对象列表。倒排索引文件内部(IndexFile)在加载.hdx类型文件。在根据.hdx文件,加载索引词对应的索引文件名、位置、长度等信息到内存,至此初始化完成。当需要创建索引文档时,更新.hdx和.idx文件。需要查询时,配置索引词列表,获取索引文件信息,然后在根据位置、长度读取对应的文档ID、Count(词语在文档中出现的次数)、DATA(词语出现在文档中的位置列表)、Rank(权证值),根据Command组合查询结果并返回给用户。

5.合并(优化)索引。合并索引有四种类(OptimizationOption): Idle、Minimum、Middle、Speedy。合并索引文件只是在本列索引文件内合并索引文件。首先在当前索引目录下新建一个Optimize目录,合并就在词目录内完成。其次根据类型获取需要合并的索引文件列表。然后读取每个词在合并索引列表中的索引信息,统一写入到新的索引文件信息中(.idx),并记录新的索引位置信息(.hdx)。最后在内存中更新合并后的索引位置信息,删除合并前的索引文件。拷贝合并后的索引文件到当前索引目录内。


你可能感兴趣的:(.net)