浅谈全文索引
這又是飛鴿傳書無聊的轉(zhuǎn)載,版權(quán)歸原作者所有,謝謝閱讀。
全文索引技術(shù)是目前搜索引擎的關(guān)鍵技術(shù)。
試想在1M大小的文件中搜索一個詞,可能需要幾秒,在100M的文件中可能需要幾十秒,如果在更大的文件中搜索那么就需要更大的系統(tǒng)開銷,這樣的開銷是不現(xiàn)實的。
所以在這樣的矛盾下出現(xiàn)了全文索引技術(shù),有時候有人叫倒排文檔技術(shù)。
原理是先定義一個詞庫,然后在文章中查找每個詞條(term)出現(xiàn)的頻率和位置,把這樣的頻率和位置信息按照詞庫的順序歸納,這樣就相當于對文件建立了一個以詞庫為目錄的索引,這樣查找某個詞的時候就能很快的定位到該詞出現(xiàn)的位置。
問題在處理英文文檔的時候顯然這樣的方式是非常好的,因為英文自然的被空格分成若干詞,只要我們有足夠大的詞匯庫就能很好的處理。但是亞洲文字因為沒有空格作為斷詞標志,所以就很難判斷一個詞,而且人們使用的詞匯在不斷的變化,而維護一個可擴展的詞匯庫的成本是很高的,所以問題出現(xiàn)了。
解決出現(xiàn)這樣的問題使“分詞”成為全文索引的關(guān)鍵技術(shù)。目前有兩中基本的方法:
二元法 它把所有有可能的每兩兩漢字的組合看為一個詞組,這樣就沒有維護詞庫的開銷。
詞庫法 它使使用詞庫中的詞作為切分的標準,這樣也出現(xiàn)了詞庫跟不上詞匯發(fā)展的問題,除非你維護詞庫。
實際上現(xiàn)在很多著名的搜索引擎都使用了多種分詞的辦法,比如“正向最大匹配”+“逆向最大匹配”,基于統(tǒng)計學(xué)的新詞識別,自動維護詞庫等技術(shù),但是顯然這樣的技術(shù)還沒有作到完美。
目前全文索引技術(shù)正走向人工智能化,也是發(fā)展的方向。
飛鴿傳書:http://www.freeeim.com/
===============================
一個完整的SQL SERVER數(shù)據(jù)庫全文索引的示例 日期:2009-08-28 14:18
SQL SERVER數(shù)據(jù)庫全文索引的示例,以pubs數(shù)據(jù)庫為例。
首先,介紹利用系統(tǒng)存儲過程創(chuàng)建全文索引的具體步驟:
1) 啟動數(shù)據(jù)庫的全文處理功能 (sp_fulltext_database)
2) 建立全文目錄 (sp_fulltext_catalog)
3) 在全文目錄中注冊需要全文索引的表 (sp_fulltext_table)
4) 指出表中需要全文索引的列名 (sp_fulltext_column)
5) 為表創(chuàng)建全文索引 (sp_fulltext_table)
6) 填充全文目錄 (sp_fulltext_catalog)
---------********示例********-------------
以對pubs數(shù)據(jù)庫的title和notes列建立全文索引,之后使用索引查詢title列或notes列中包含有datebase 或computer字符串的圖書名稱:
在這之前,需要安裝Microsoft Search服務(wù),啟動SQL server全文搜索服務(wù)
user pubs --打開數(shù)據(jù)庫
go
--檢查數(shù)據(jù)庫pubs是否支持全文索引,如果不支持
--則使用sp_fulltext_database 打開該功能
if(select databaseproperty('pubs','isfulltextenabled'))=0
execute sp_fulltext_database 'enable'
--建立全文目錄FT_PUBS
execute sp_fulltext_catalog 'FT_pubs','create'
--為title表建立全文索引數(shù)據(jù)元
execute sp_fulltext_table 'title','create','FT_pubs','UPKCL_titleidind'
--設(shè)置全文索引列名
execute sp_fulltext_column 'title','title','add'
execute sp_fulltext_column 'title','notes','add'
--建立全文索引
--activate,是激活表的全文檢索能力,也就是在全文目錄中注冊該表
execute sp_fulltext_table 'title','activate'
--填充全文索引目錄
execute sp_fulltext_catalog 'FT_pubs','start_full'
go
--檢查全文目錄填充情況
While fulltextcatalogproperty('FT_pubs','populateStatus')<>0
begin
--如果全文目錄正處于填充狀態(tài),則等待30秒后再檢測一次
waitfor delay '0:0:30'
end
--全文目錄填充完成后,即可使用全文目錄檢索
select title
form
where CONTAINS(title,'database')
or CONTAINS(title,'computer')
or CONTAINS(notes,'database')
or CONTAINS(notes,'database')
'--------------以下介紹一下全文操作類的系統(tǒng)存儲過程
過程名稱:sp_fulltext_service
執(zhí)行權(quán)限:serveradmin或系統(tǒng)管理員
作 用:設(shè)置全文搜索屬性
過程名稱:sp_fulltext_catalog
執(zhí)行權(quán)限:db_owner及更高角色成員
作 用:創(chuàng)建和刪除一個全文目錄,啟動或停止一個全文目錄的索引操作
過程名稱:sp_fulltext_database
執(zhí)行權(quán)限:db_owner角色成員
作 用:初始化全文索引或刪除數(shù)據(jù)庫中所有全文目錄
過程名稱:sp_fulltext_table
執(zhí)行權(quán)限:db_ddladnmin或db_owner角色成員
作 用:將一個表標識為全文索引表或非全文索引表
過程名稱:sp_fulltext_column
執(zhí)行權(quán)限:db_ddladnmin角色成員
作 用:指出一個全文索引表中的那些列假如或退出全文索引
總結(jié)
- 上一篇: 数据的设计命名的十个要点
- 下一篇: 【飞秋】C# 调用