全文索引原理和一個完整的SQL SERVER資料庫全文索引的樣本)

來源:互聯網
上載者:User

全文檢索索引是對大資料文本進行索引,在建立的索引中對要尋找的單詞進行進行搜尋,定位哪些文本資料包括要搜尋的單詞。因此,全文檢索索引的全部工作就是建立索引和在索引中搜尋定位,所有的工作都是圍繞這兩個來進行的。下面就逐個介紹。

  建立全文索引中有兩項非常重要,一個是如何對文本進行分詞,一是建立索引的資料結構。分詞的方法基本上是二元分詞法、最大匹配法和統計方法。索引的資料結構基本上採用倒排索引的結構。

  分詞的好壞關係到查詢的準確程度和產生的索引的大小。在中文分詞發展中,早期經常使用分詞方式是二元分詞法,該方法的基本原理是將包含中文的句子進行二元分割,不考慮單詞含義,只對二元單詞進行索引。因此該方法所分出的單詞數量較多,從而產生的索引數量巨大,查詢中會將無用的資料檢索出來,好處是演算法簡單不會漏掉檢索的資料。之後又發展出最大匹配分詞方法,該方法又分為正向最大分詞和逆向最大分詞。其原理和查字典類似,對常用單詞產生一個詞典,分析句子的過程中最大的匹配字典中的單詞,從而將句子拆分為有意義的單詞鏈。最大匹配法中正向分詞方法對偏正式詞語的分辨容易產生錯誤,比如“首飾和服裝”會將“和服”作為單詞分出。達夢資料庫採用的是改進的逆向最大分詞方法,該分詞方法較正向正確率有所提高。最為複雜的是通過統計方式進行分詞的方法。該方法採用隱式馬爾科夫鏈,也就是後一個單詞出現的機率依靠於前一個單詞出現的機率,最後統計所有單詞出現的機率的最大為分詞的依據。這個方法對新名詞和地名的識別要遠遠高於最大匹配法,準確度隨著取樣文本的數量的增大而提高。

  二元分詞方法和統計方法是不依賴於詞典的,而最大匹配法分詞方法是依賴於詞典的,詞典的內容決定分詞結構的好壞。

  全文檢索索引的索引被稱為倒排索引,之所以成為倒排索引,是因為將每一個單詞作為索引項目,根據該索引項目尋找包含該單詞的文本。因此,索引都是單詞和唯一記錄文本的標示是一對多的關係。將索引單詞排序,根據排序後的單詞定位包含該單詞的文本。

逆向分詞的過程說明

  步驟1)讀取一整條句子到變數str中,轉到步驟2

  步驟2)從句子的尾端讀取1個字到變數word中,轉到步驟3

  步驟3)在字典尋找word中儲存的單詞。如果存在則儲存word,轉到步驟4,否則轉到步驟5)

  步驟4)如果是字典中最大單詞或者超過最大單詞數(認定為新詞),從句尾去掉該單詞,返回步驟2

  步驟5)讀取前一個字到word中,構成新單詞,轉到步驟3)

詞庫的記憶體資料結構和詞庫中單詞的匹配演算法

  記憶體中單詞採用階層儲存

  假設字典中有如下的單詞:中國  中華民國 國家 人民 民主

  在記憶體中按照如下方式按層排列,其中每一個方塊代表一個字,箭頭所指向為該單詞的前一個字。

單詞按照如下方式匹配

  比如尋找單詞“中華民國”

  首先在第一層中使用二分法找到“國”字

  獲得“國”下層的數組“中民”

  在該層使用二分法尋找“民”,獲得“民”下層的數組“華”

  在該層使用二分法尋找“華”,獲得“華”下層的數組“中”

  最後在該層找到中,至此,但此匹配完畢。

索引的格式

  索引的格式是倒排索引的格式,也就是一個單詞對應若干個文本表示。

  在達夢資料庫中,建立全文索引的對象是rec中的欄位,產生倒排索引使用資料庫中的b樹進行儲存。

  在資料庫是對某個字元欄位進行全文索引,因此,rec的rowid作為該rec上該field的標示是必須要被記錄的。

  因此倒排索引儲存的格式如下。

欄位1 欄位2
單詞1 Rowid1,rowid2…
單詞1 Rowid1,rowid2…

由於b樹的欄位長度是有限的,因此b樹儲存的格式為

欄位1 欄位2 欄位3
單詞1 單詞1Rowid的格數 Rowid1,rowid2…
單詞1 單詞2Rowid的格數 Rowid1,rowid2…

全文索引的查詢

  全文的索引查詢首先將對要查詢的單詞進行分詞,然後在儲存倒排索引的b樹中將包含這些單詞的rowid全部尋找出來,並根據這些rowid在儲存實際資料的b樹中,將包含這些資料的行過濾出來。

一個完整的SQL SERVER資料庫全文索引的樣本。(以pubs資料庫為例)首先,介紹利用系
   1) 啟動資料庫的全文處理功能 (sp_fulltext_database)
   2) 建立全文檢索目錄 (sp_fulltext_catalog)
   3) 在全文檢索目錄中註冊需要全文索引的表 (sp_fulltext_table)
   4) 指出表中需要全文索引的列名 (sp_fulltext_column)
   5) 為表建立全文索引 (sp_fulltext_table)
   6) 填充全文檢索目錄 (sp_fulltext_catalog)
   ---------********樣本********-------------

  以對pubs資料庫的title和notes列建立全文索引,之後使用索引查詢title列或notes列中
包含有datebase 或computer字串的圖書名稱:在這之前,需要安裝Microsoft Search服務
   user pubs --開啟資料庫
   go
   --檢查資料庫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表建立全文索引資料元
   execute sp_fulltext_table 'title','create','FT_pubs','UPKCL_titleidind'--設定
   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--如果全文檢索目錄正處於填充狀態,則等待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')
   '--------------以下介紹一下全文操作類的系統預存程序
   過程名稱:sp_fulltext_service
   執行許可權:serveradmin或系統管理員
   作 用:設定全文檢索搜尋屬性
   過程名稱:sp_fulltext_catalog
   執行許可權:db_owner及更高角色成員
   作 用:建立和刪除一個全文檢索目錄,啟動或停止一個全文檢索目錄的索引操作
   過程名稱:sp_fulltext_database
   執行許可權:db_owner角色成員
   作 用:初始化全文索引或刪除資料庫中所有全文檢索目錄
   過程名稱:sp_fulltext_table
   執行許可權:db_ddladnmin或db_owner角色成員
   作 用:將一個表標識為全文索引表或非全文索引表
   過程名稱:sp_fulltext_column
   執行許可權:db_ddladnmin角色成員
   作 用:指出一個全文索引表中的那些列假如或退出全文索引

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.