首頁 > 軟體

SQL Server的全文搜尋功能

2022-05-21 13:00:21

一、使用SQL Server全文搜尋設定

要使用SQL Server的全文搜尋服務,需要進行如下設定。

1、開啟全文搜尋服務:

2、開啟資料庫的全文索引功能:

--開啟資料庫的全文搜尋功能
EXEC sp_fulltext_database 'enable';

3、建立全文索引目錄:

--建立全文索引目錄
CREATE FULLTEXT CATALOG IndexCatalog
     ON FILEGROUP [PRIMARY]
     IN PATH 'E:SQLServerIndex'
     AS DEFAULT

4、建立唯一索引:

--建立唯一索引
CREATE UNIQUE NONCLUSTERED INDEX IndexContent ON Article(ArticleContent ASC)

5、建立全文索引:

--建立全文索引
CREATE FULLTEXT INDEX ON Article
  (ArticleContent)
  KEY INDEX IndexContent ON IndexCatalog    --IndexContent是唯一索引名

二、使用全文搜尋

CONTAINS搜尋方式

1.簡單詞搜尋

- 搜尋一個或多個特定的詞或短語。詞可以包括一個或多個字元,中間沒有空格或標點。短語可以由空格分隔的多個片語成,但詞之間可以有標點也可以沒標點:

--搜尋文章內容含有張三或者李四的記錄
  SELECT * FROM Article WHERE CONTAINS(ArticleContent,'"張三" OR "李四"')

2.字首詞搜尋的方式

- 搜尋指定文字開頭的詞或短語,字首詞的搜尋方式主要是用在搜尋英文中,例如搜尋以“do”開頭的單詞,則可以將doctor、document、download等單詞都搜尋出來。

--搜尋文章內容中含有以'認'開始的詞的記錄
  SELECT * FROM Article WHERE CONTAINS(ArticleContent,'"認*"')    --認為,認識

3.加權詞搜尋的方式

- 給多個搜尋條件加上權值,加權值越高的記錄排在越前面,當以多個字串作為搜尋條件搜尋記錄時,可以為不同的字串加上一個加權值,這個加權值是介於0和1之間的數值,加權值越高的記錄排在越前面。事實上在該SELECT語句的返回結果集裡,並沒有按加權值的大小來排序,因為WEIGHT不影響CONTAINS查詢的結果,只會影響CONTAINSTABLE查詢中的排序:

--在CONTAINS搜尋中,權重並不影響排序
  SELECT * FROM Article
  WHERE CONTAINS(ArticleContent,'ISABOUT ("北京" weight(0.9),"上海"  weight(0.6),"廣州"  weight(0.5))')

4.鄰近詞搜尋的方式

- 可以搜尋與另一個詞或短語相鄰近的詞或短語:

--搜尋文章內容中第二個詞在第一個詞附近的記錄
  SELECT * FROM Article WHERE CONTAINS(ArticleContent,'"張三" NEAR "李四"')

FREETEXT搜尋方式

FREETEXT搜尋方式與CONTAINS搜尋方式相比,其搜尋結果表現都十分不精確,因為FREETEXT的搜尋方式是將一個句子中的每個單字拆分開進行搜尋的。使用CONTAINS搜尋方式搜尋條件為“教育部”的記錄,那麼搜尋出來的將是記錄裡包含“教育部”三個字串的記錄。

--搜尋文章內容中包含'程'字和'社'字的記錄
  SELECT * FROM Article WHERE FREETEXT(ArticleContent,'程社')

CONTAINSTABLE搜尋方式

1、CONTAINSTABLE基本搜尋:

--CONTAINSTABLE搜尋文章內容中含有友誼的記錄
  SELECT * FROM CONTAINSTABLE(Article,ArticleContent,'友誼') as table1

留意到返回中指包含了兩個欄位:

其實就是CONTAINSTABLE表中的資料。

2、CONTAINSTABLE返回所需列:

--CONTAINSTABLE搜尋返回所需列
  SELECT * FROM Article JOIN
    CONTAINSTABLE(Article,ArticleContent,'"環境"',2) as table1
    ON Article.ArticleContent = table1.[KEY]
  ORDER BY table1.RANK DESC

3、CONSTAINSTABLE按符合條件排序

--按符合條件排序
  SELECT * FROM Article JOIN
      CONTAINSTABLE(Article,ArticleContent,' "泰國" NEAR "高鐵" ',10) as table1
      ON Article.ArticleContent = table1.[KEY]
   ORDER BY table1.RANK DESC

看到查詢結果的確按符合條件進行了排序:

4、CONSTAINSTABLE按按權值排序

--權重值排序
  SELECT * FROM Article JOIN
  CONTAINSTABLE(Article,ArticleContent,
  'ISABOUT ("泰國" weight(0.9),
  "高鐵"  weight(0.6),
  "環境"  weight(0.1))') AS TABLE1
  ON Article.ArticleContent = TABLE1.[KEY]
  ORDER BY TABLE1.RANK DESC

結果按照權重值排序:

使用FREETEXTTABLE搜尋

單個字搜尋,但是多了引數可供使用:語法如下:

FREETEXTTABLE (table , { column_name | (column_list) | * }
  , 'freetext_string'
  [ ,LANGUAGE language_term ]
  [ ,top_n_by_rank ] )

範例:

搜尋image欄位

在SQL Server 2005的image型別的欄位裡,不僅僅是可以儲存圖形檔案,還可以儲存如可執行檔案、音樂檔案、文字檔案等眾多檔案型別。SQL Server 2005支援對儲存在image型別的欄位裡的一些檔案的內容進行全文搜尋,但在建立全文索引時必須指明儲存在image欄位裡的檔案的型別。

SQL Server 2005支援對儲存在image中的純文字檔案、網頁檔案、Word檔案、Excel檔案和PowerPoint檔案的內容進行查詢,其擴充套件名欄位必須分別為txt、htm、doc、xls和ppt。全文索引建立完畢後,對image欄位裡的檔案內容進行查詢的方法與其他欄位的查詢方法是一樣的:

SELECT 編號,標題,檔案,擴充套件名 FROM 文章 WHERE CONTAINS(檔案,'資料庫')

三、小結與評價

下面給出這個SQL Server全文搜尋的常用SQL語句:

--開啟資料庫的全文搜尋功能:
EXEC sp_fulltext_database 'enable'; --資料庫啟用全文索引
--關閉資料庫的全文搜尋功能:
EXEC sp_fulltext_database 'disable'; --資料庫禁用全文索引


--如果你忘記了全文索引的目錄、表、列建立過全文索引
EXEC sp_help_fulltext_catalogs    --全文索引目錄
EXEC sp_help_fulltext_columns    --全文索引列
EXEC sp_help_fulltext_tables    --全文索引表

到此這篇關於SQL Server全文搜尋的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com