在Sql Server中使用全文檢索索引

來源:互聯網
上載者:User

在Sql Server資料庫中可以使用全文索引,與僅適用於字元模式的 LIKE 謂詞不同,全文檢索查詢將根據特定語言的規則對詞和短語進行操作,從而針對此資料執行語言搜尋。

對大量非結構化的文本資料進行查詢時,使用全文檢索搜尋獲得的效能優勢會得到充分的表現。對數百萬行文本資料執行的 LIKE 查詢可能需要花費幾分鐘時間才能返回結果;但對同樣的資料,全文檢索查詢只需要幾秒或更少的時間,具體取決於返回的行數。

可以對包含 char、varchar 和 nvarchar 資料的列建立全文索引。也可以對包含格式化位元據(如儲存在 varbinary(max) 或 image 列中的 Microsoft Word 文檔)的列建立全文索引。不能使用 LIKE 謂詞來查詢格式化的位元據。若要對一個表建立全文索引,該表必須具有一個唯一且非空的列。

下面是建立全文檢索索引的步驟

1、首先建立一個全文檢索目錄,一個全文檢索目錄可以包含多個全文索引,但一個全文索引只能用於構成一個全文檢索目錄。每個資料庫可以不包含全文檢索目錄或包含多個全文檢索目錄。as default參數表明把此全文檢索目錄作為預設的全文檢索目錄。

Create fulltext catalog DocumentCatalog as default
2、然後建立唯一非叢集索引。

create unique index T_DocumentsContent_VerID on T_DocumentsContent(VerID)
這個一般把你要全文索引的表上的主鍵作為唯一非叢集索引。該索引將強制插入列中的資料具有唯一性。一般都是主鍵符合這個要求。

3、最後一步就是建立全文索引

Create FULLTEXT INDEX ON T_DocumentsContent(DOCUCONTENT TYPE COLUMN ExtendedName)
key index T_DocumentsContent_VerID on DocumentCatalog
with change_tracking auto
T_DocumentsContent:用於全文索引的表明
DocuContent:用於全文檢索索引的欄位
如果用於全文檢索索引的欄位是二進位流檔案,那麼要通過指定這個二進位流檔案的副檔名由哪個列提供資料。如上例的Type Column ExtendedName,表明DocuContent的類型由ExtendedName列提供
key index用來指定全文索引表唯一鍵索引的名稱
on DocumentCatalog:表明這個全文索引是建立在哪個全文檢索目錄上
with Change_Tracking:指定 SQL Server 是否維護一份對索引資料的全部更改的列表。變更追蹤不會記錄通過 WRITETEXT 和 UPDATETEXT 進行的資料更改。他有幾個選項
1. MANUAL: 指定是使用 SQL Server Agent按計劃傳播變更追蹤日誌,還是由使用者手動進行傳播。
2.AUTO:指定在關聯的表中修改了資料時,SQL Server 自動更新全文索引。預設值為 AUTO。
3.OFF [ ,NO POPULATION] 指定 SQL Server 不保留對索引資料的更改的列表。僅當ANGE_TRACKING 為 OFF 時,才能使用 NO POPULATION 選項。如果指定了 NO POPULATION,則 SQL Server 在建立索引後不會對其進行填充。只有在使用者使用 START FULL 或 INCREMENTAL POPULATION 子句執行 ALTER FULLTEXT INDEX 命令後,才會索引頁預留空間。如果未指定 NO POPULATION,則 SQL Server 建立索引後將對其進行完全填充
當然如果需要使用全文索引需要把全文索引服務啟動,就是SQL Server FullText Search這個服務。注意Sql Express版本不能使用全文索引。

最後剩下如何進行全文檢索索引的查詢了。在查詢種我們不能使用like關鍵字來進行全文檢索索引,應該使用Contains謂詞,他的第一個參數是你要全文檢索索引的列名,可以指定多個列,用都好分割,並且必須用小括弧括起來,第二個參數是需要搜尋的文本,第二個參數前後必須用單引號包含起來,裡面查詢的文本可用引號包含,並且可以使用萬用字元和條件陳述式,如

where Contains(a.Content, '"中國*" or "武漢"')
條件陳述式可以用符號來代理如AND可以用&來代替,具體參看SQLServer的協助文檔。

第三個參數是查詢的語言。如果一個列裡面儲存了多種語言,允許使用者指定搜尋的語言。

除了Contains謂詞可以用於全文檢索索引FreeText也可以進行全文檢索索引,但次謂詞用於搜尋含有基於字元的資料類型的列,好像不能搜尋二進位流的列,但協助文檔卻又說支援Image的列。但是FreeText的搜尋精度沒有Contains的謂詞高,推薦使用Contains謂詞。

 

本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/firewolffeng/archive/2007/12/20/1956081.aspx

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.