搜索引擎--文件索引设计

因项目需要,文件索引的设计为了方便搜索引擎在取得文档进行切词后分析形成的文件索引。我发了我的设计上来让大家看看。我知道还有很多不对和考虑不到的地方,麻烦各位兄弟姐妹们多评评,提高宝贵意见。谢谢大家。大家狠狠的砸砖吧!   

文件索引设计

索引文件采用倒排档结构,建立数据库表(三个索引表)

一级索引表

1、一级索引表按词曲中的首字母分N个扩展表,A—G为一个表;H—N为一个表;O—W为一个表。

2、一级索引文件属于记录式文件,每一记录大小固定

共有四个数据项构成,WordID、文档数、第一个文档开始位置(存放在哪个二级索引表)、第一个文档开始位置(存放在二级索引表哪个ID

WordID是词典中词条的ID文档数是指这个词总共在多少个文档中出现,文档开始位置是一个文件指针指向二级索引中出现当前词的文档集中的第一个文档存储位置,这个指针是由二级索引表的表名(定长字符串)和第几条记录组成(数字形值)。通过这个指向可以直接定位到二级索引表读取位置,然后读取nDocs个记录即可,因为它们是存放在连续的地址空间上(通过链表形式)

WordID

文档数

FirstTable

FirstID

WordID

nDocs

放在哪个二级索引表

二级索引表哪个ID

WordID

nDocs

放在哪个二级索引表

二级索引表哪个ID

WordID

nDocs

放在哪个二级索引表

二级索引表哪个ID

…………………………………………………………..

二级索引表

1、 二级索引表根据数据量自动扩展N个二级索引表

2、 二级索引也是一种记录式文件,每一记录有三个数据项组成,DocID、出现次数、第一个Hit位置。其中DocID是文档的ID出现次数指的是当前文档中某一个词出现的次数,第一个Hit位置也是一个指针,指向Hits表中的某一位置。通过这个指针就可以直接定位到Hits位置中的读取位置,这样连续读取nHits个记录就可以将所有当前词在当前文档中的出现的位置信息都读入。通过下一文档的指针找到下一个出现当前词的文档,形成一个链表。该链表的最后一个指针指回第一个指针,形成封闭的链表

ID主键

文档的ID

首次出现位置()

首次出现位置

下一文档的指针(表)

下一文档的指针(位置)

ID

DocID

Hits

Hits位置

哪个二级索引表

二级索引表哪个ID

ID

DocID

Hits

Hits位置

哪个二级索引表

二级索引表哪个ID

ID

DocID

Hits

Hits位置

哪个二级索引表

二级索引表哪个ID

…………………………………………………………..

Hits位置表

1Hits位置表根据数据量自动扩展NHits位置表

2Hits位置信息文件:些文件每一记录只有一个数据项,即Hit位置信息,只记录了各词在文档中出现的位置。将同一词在同一文档中的出现位置按出现的先后排列。这样在读取文档并提取摘要时只需对字符串从头到尾扫描一边即可,不需要来回扫描。

ID主键

出现次数

出现位置

ID

出现次数

1,4,6,10………..

ID

出现次数

43,46,66,100………..

ID

出现次数

8,50,89,213………..

好处:

1)、将倒排档索引文件组织成数据库系统,由数据库系统来管理会大提高系统的效率并在数据维护方面有一定的优越性。

2)、每处理完一文档无须导出顺排数据

3)、在一级索引表中对关键字分块,按wordID顺序排序、有利于搜索性能

4)、数据更新方便,删除,增加数据只需更改指针指向。

存在问题:

   1)、搜索二级索引表将出现循环搜索

还有存在什么问题,大家说出来。还有我真正应该怎么去想这样的问题!

posted @ 2007-09-14 18:14 harry.guo 阅读(2539) 评论(7)  编辑 收藏 网摘 所属分类: 设计模式

  回复  引用  查看    
#1楼 2007-09-15 01:23 | 暗香浮动      
why not lucene?
  回复  引用  查看    
#2楼 2007-09-15 08:28 | 蛙蛙池塘      
呵呵,模仿sqlserver的B数?
  回复  引用  查看    
#3楼[楼主] 2007-09-15 20:42 | harry.guo      
@暗香浮动
要用C#写一个,正在参考lucene

  回复  引用    
#4楼 2007-09-17 09:15 | designbeauty[未注册用户]
请教一下,如果不考虑文档的类型,用搜索引擎和用sqlserver的全文搜索有什么区别吗?
  回复  引用  查看    
#5楼 2007-09-17 10:36 | 聂锋      
lucene 有 .NET版本啊。。
  回复  引用  查看    
#6楼[楼主] 2007-09-19 18:02 | harry.guo      
各位路过的兄弟姐妹们,能不能回答我一个疑问:
我用数据库建立这样的全文索引和类lucene的建立的全文索引的不同是什么?郊率怎么比较?

  回复  引用  查看    
#7楼[楼主] 2007-09-19 18:02 | harry.guo      
小弟技术上不成熟,问的问题不专业,老大们莫见笑



发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 893378




相关文章:

相关链接: