sunfruit[请访问http://www.fruitres.cn]

--我相信JAVA能走得更远 QQ:316228067

全文检索技术概述

--sunfruit

        最近做了一个资料管理软件用来管理日常资料,编写好了基本功能以后总是感觉这个软件缺少了什么,是的,是全文检索,没有全文检索功能,这个管理软件用到最后也一定对于查找资料相当困难,于是加紧赶工加上了作为基本功能的全文检索。
        有人了解检索技术,而且也不是什么高深技术,我也不班门弄斧,就是把原理大概介绍一下,感兴趣的朋友也可以自己尝试编写一下。
        全文检索技术其实就是用空间换时间--用硬盘空间换取检索时间。
        首先需要字索引,要想建立字索引就需要字库,这个字库其实就是每一个汉字,大概6000个汉字左右吧,再加上a-z,A-Z,0-9,基本上就可以作为字索引的字库了,然后就是利用字库生成字索引。
        生成字索引的原来就是以字库为基础,为字库里面的每一个字做索引,在每一个文章里面做匹配,把一个文章里面所有的匹配的位置记录下来,举个例子:比如字库里面的"啊",如果现在要建立"啊"的索引,那么要遍历所有要做索引的文章,把所有的"啊"的位置要记录下来,当然要可以区分位置是哪个文章的,要不然混成一堆,就没有意义了[因为最后检索索引的最终目的是要定位出文章的ID],这样就形成了字索引。依此类推,所有汉字的字索引,索引建立就完成了
        检索索引,这个是关键的关键,速度是否快,全看这里,当然索引建立的合理与否也能影响检索速度,举个例子:比如要查询"业务"这个关键词,
        首先在字索引中查到"业": 在文件号11111 中的位置有11,40,99  在文件号11112 中的位置有22,33,45
         然后在字索引中查到"务": 在文件号11111 中的位置有12,66,100  在文件号11112 中的位置有27,39,60

        经过计算会得到命中的文件号为 11111 ,因为业务必须位置号码要连续的出现才算命中

        大概的思路就是这样
       当然检索技术还会有词索引技术,根据字索引可以进一步生成词索引,并且有切词技术。。。就不多说了
       
        那个资料管理软件的DEMO下载地址 http://www.blogjava.net/sunfruit/archive/2006/04/01/38625.html
        DEMO的界面样式如下
        检索界面
        Shell00.jpg
        主界面
        Shell01.jpg

        注意:使用全文检索的时候,首先要生成索引[在工具菜单栏里面],并且不能重复生成同一个文章的索引,而只能重新生成,这个在生成的时候有选项,因为如果重复生成那么在字索引里面就会重复记录,到时候检索的时候就会检索出来多个同样的文章了

posted on 2006-04-05 00:20 sunfruit 阅读(2529) 评论(2)  编辑  收藏 所属分类: JAVA SE & EE

评论

# re: 全文检索技术概述 2006-04-05 14:09 lizongbo



为什么不用lucene呢?

曾经有过想用lucene做一个类似楼主的工具的程序。

结果因为太懒而没有做了:(


  回复  更多评论   

# re: 全文检索技术概述 2006-04-05 14:44 sun fruit

自己尝试一下检索制作过程,原理上一样

lucene听说过,一直没有尝试,这段时间也在看,吸取一些经验  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航: