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.aygfsteel.com/sunfruit/archive/2006/04/01/38625.html
          ??????? DEMO的界面樣式如下
          ??????? 檢索界面
          ????????Shell00.jpg
          ??????? 主界面
          ????????Shell01.jpg

          ??????? 注意:使用全文檢索的時候,首先要生成索引[在工具菜單欄里面],并且不能重復生成同一個文章的索引,而只能重新生成,這個在生成的時候有選項,因為如果重復生成那么在字索引里面就會重復記錄,到時候檢索的時候就會檢索出來多個同樣的文章了

          posted on 2006-04-05 00:20 sunfruit 閱讀(2551) 評論(2)  編輯  收藏 所屬分類: JAVA SE & EE

          評論

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



          為什么不用lucene呢?

          曾經有過想用lucene做一個類似樓主的工具的程序。

          結果因為太懶而沒有做了:(


            回復  更多評論   

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

          自己嘗試一下檢索制作過程,原理上一樣

          lucene聽說過,一直沒有嘗試,這段時間也在看,吸取一些經驗  回復  更多評論   

          主站蜘蛛池模板: 德庆县| 花莲县| 双桥区| 西藏| 台中县| 多伦县| 涟源市| 南丰县| 泸定县| 西藏| 博野县| 婺源县| 建阳市| 西昌市| 平乐县| 定西市| 米林县| 马龙县| 皮山县| 滦南县| 沁水县| 油尖旺区| 旬邑县| 雅安市| 平湖市| 高陵县| 博罗县| 宁城县| 玉林市| 界首市| 隆尧县| 吉隆县| 武汉市| 深水埗区| 辉南县| 林周县| 特克斯县| 义马市| 福贡县| 拉孜县| 威宁|