SQL Server 全文檢索索引初探

來源:互聯網
上載者:User

建立Catalog

現在您需要建立一個全文catalog。該目錄似乎是一個容器,把所有的全文索引到。因此,如果你要搜尋需要的三個表的文本,需要產生三個索引(每個表一個索引),並且把三個索引放在一個catalog中。
提示:在微軟網站涉及相關操作的一些資訊到需要SQL完整版本,如“Storage folder”就是Express版本沒有的。

別著急,下面大家來不通過管理介面手動建立一下catalog。Demo中,只建立了一個catalog,並把兩個full-text index放入其中。個人的一些經驗,如果一個index涉及的資料量較大,你應該為每一個index建立一個單獨的catalog。

下面操作是如何建立一個catalog:

  1. 程式—SQL SERVER管理介面—串連需要操作的資料庫
  2. 點擊 “New Query”
  3. 輸入:
use DBName
go
EXEC sp_fulltext_database ‘enable’
go
CREATE FULLTEXT CATALOG catalogName
go

 

說明:DBName指要操作資料庫名稱;catalogName指catalog的名字,根據自己需要定義

  1. 執行上述SQL語句,將會做兩件事情,在相應資料庫上enable fulltext searching;建立全文檢索目錄

提示:如果目錄將會很大的話,把目錄放在其他硬碟或者地址會是一個明智的選擇。這樣會很大程度的提高效能。

建立全文索引

建立全文索引的一個前提是,表中必須有這樣的一個索引“unique, single-column, non-nullable index”。大多數情況下,主鍵都會滿足這樣的要求。

SQL Server這樣做的實際要求是:

1. 必須有非空索引(主鍵都會滿足這樣的要求)。

2. 索引必須作用在單獨一個列上。複合主鍵是不滿足這個要求,一個work around是可以建立立一列,如textid,int型,自增,並建立索引。

提示:如果你的主鍵過長,筆者也建議建立一個int型自增列,例如主鍵是GUID的話,那麼建立全文索引開銷會是非常巨大的。

建立全文索引步驟

  1. 保證上面提到的條件; unique, single-column, non-nullable index
  2. 輸入SQL 陳述式
CREATE FULLTEXT INDEX ON yourdatabase.dbo.yourtable
(
column_to_index
Language 0X0
)
KEY INDEX yourindex ON yourcatalog
WITH CHANGE_TRACKING AUTO

說明:

yourdatabase.dbo.yourtable 使用者資料庫的名字和表明

column_to_index 含有全文內容的列

yourindex表裡的索引(就是上面描述需滿足unique, single-column, non-nullable index的索引)

yourcatalog 本文開始時建立過的catalog名字

Language:告訴 SQL Server可以是任意語言(當然你也可以通過Management Studio修改成中文,英文等,具體語言編碼這裡不敖述)

提示:如果你的表資料量很大,建立全文索引會需要一定的時間,甚至會出現一段時間CPU使用率為100%的情況。

使用全文檢索索引

下面來使用一下,輸入SQL語句:

SELECT description
FROM yourtable
WHERE CONTAINS(description, '"NBA Playoff"')

提示:

1. 字串的格式,最外面是單引號,裡面是雙引號,最裡面是要尋找的文本。

2.  想要模糊一把的話,請使用*,  如’”NBA*”‘會尋找所有以NBA開頭的文本。

3. 不支援開始模糊,筆者不才,’”*BA*”‘這樣是查不出東西的,大家如有辦法,歡迎指點

一些調試方法

  1. SQL Server Log: C:/Program Files/Microsoft SQL Server/MSSQL.1/MSSQL/LOG
  2. FullText Index Log: SQLFTxxxxxx.LOG

提示:可讀性很差,但真正瞭解之後對Debug是很有協助的。

其他

1.  SQL Server 2005之後,允許一個表擁有兩個及以上全文索引。

2.  尋找表中哪一列作為全文檢索索引列 select * from sys.fulltext_indexes

3.  如何添加一個全文索引

exec sp_fulltext_column ‘tabname’, ‘colname’, 'add', '2057'

說明:

tabname:  一段或兩段的表名。該表必須已經存在於當前的資料庫中。該表必須有全文索引。

colname:  是 qualified_table_name 中某個列的名稱。該列必須是一個字元,或是一個 image 列,不能是一個已計算資料行。

2057:    表示語言, code ‘2057′ 表示 UK English

地區設定 地區設定識別碼
中性 0
簡體中文 0×0804
繁體中文 0×0404
荷蘭語 0×0413
英國英語 0×0809
美國英語 0×0409
法語 0×040c
德國 0×0407
意大利 0×0410
日語 0×0411
朝鮮語 0×0412
現代西班牙語 0×0c0a
普通瑞典語 0×041d

 

結論

全文檢索索引很容易建立,一旦建立,快速的響應將給使用者和使用者帶來驚喜!

相關文章

聯繫我們

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