日期:2014-05-17  浏览次数:20721 次

高难度,自己开发中文全文索引系统。
自己开发了一个中文全文索引系统,索引文件的存储有问题,我是一个词存在一个文件中,比如“中国”存在“zhong/guo/ix.txt”这个目录文件下,但问题是这样会产生非常多的文件(汉语词汇量+各种英语词汇),文件多达几百万个,超出我的想象,请问各位还有什么好的存储方式吗?

------解决方案--------------------
按首字吧,应该是几千个


------解决方案--------------------
最基本地,索引必须保存在磁盘上,磁盘上必须有现成的动态索引文件。

我给你举个例子吧(这里只是随便胡乱举个尽可能最简单的例子,实际上这样还是不够实用,你只要看懂大概意思就好了)。

假设在“主单词”(对于中文来说有时候一个字就是一个单词)文件中,每一个单词加上必要的属性占最多800个字节,那么就可以用一个记录编号n来表示文件中第多少个单词。

对于“索引”文件,比如说每12个字节表示一个数据结构,这个数据结构前4个字节表示在“主单词”文件中的位置编号(也就是指向具体的单词),然后4个字节表示排在此结构前的“左子树”的索引文件记录编号,最后4个字节表示排在此结构后的“右子树”的索引文件记录编号。

搞明白了最基本的数据结构,你才可能搞点高级一点的算法,例如B+树的节点操作算法。如果你的结构上完全没有索引概念,什么都靠遍历查找,那么怎么可能说你正在研究索引技术啊?
------解决方案--------------------
现在应该不用做全文检索了,因为lucene.net已经很成熟,
------解决方案--------------------
如果大多数文件内容都超过一个簇,其实几百万个文件也是可以的,windows目录的也是可以建立索引的,同样是类B树的实现。
如果文件内容大多比较少,不仅浪费硬盘空间,而且浪费系统缓存空间,导致命中率降低。