首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 全文檢索服務完整指南:從 CONTAINS、FREETEXT 到權重排序的實戰語法

     編輯:關於SqlServer

前言

SQL Server 全文檢索(Full-Text Search)提供強大的非結構化文字查詢能力,遠超 LIKE '%keyword%' 的效能與功能。本文系統整理核心謂詞(CONTAINS、FREETEXT)、邏輯運算子、鄰近搜尋、字尾擴展、權重排序等語法,並附上中文環境適用性說明。

核心查詢謂詞

1. CONTAINS — 精確與邏輯組合查詢

支援布林邏輯 AND、OR、AND NOT,語法:

SELECT username FROM member
WHERE CONTAINS(userinfo, N'"作家" AND "木匠"');

SELECT username FROM member
WHERE CONTAINS(userinfo, N'"作家" OR "木匠"');

SELECT username FROM member
WHERE CONTAINS(userinfo, N'"作家" AND NOT "木匠"');

注意:關鍵字需用雙引號包裹,中文查詢建議加 N 前綴避免編碼問題。

2. NEAR — 鄰近距離搜尋

找出兩詞距離較近的文件(預設同一句或段落內):

SELECT Content FROM MicrosoftRecord
WHERE CONTAINS(Content, N'"比爾·蓋茨" NEAR "保羅·艾倫"');

適用於人名、專有名詞常共同出現的場景。

3. FORMSOF INFLECTIONAL — 詞形變化擴展(英文為主)

自動匹配動詞時態、名詞複數等:

SELECT ProductName FROM Products
WHERE CONTAINS(ProductName, 'FORMSOF (INFLECTIONAL, dry)');
-- 可匹配 dry, dried, drying 等

中文限制:中文無詞形變化,此功能對中文無效。

4. 前綴搜尋(* 萬用字元)

SELECT ProductName FROM Products
WHERE CONTAINS(ProductName, '"dis*"');
-- 匹配 dis*, 如 display, distance 等

同樣主要適用英文,中文分詞機制不同,前綴匹配效果有限。

5. ISABOUT WEIGHT — 多條件權重排序

指定各條件權重 (0.0~1.0),影響相關性排名:

SELECT CategoryName, Description FROM Categories
WHERE CONTAINS(Description,
    'ISABOUT (spread WEIGHT (.8), sauces WEIGHT (.4), relishes WEIGHT (.2))');

權重越高,符合該條件的文件排名越前。

資料表值函數:CONTAINSTABLE / FREETEXTTABLE

回傳 KEY、RANK 資料表,可進一步 JOIN 排序:

SELECT FT_TBL.*, KEY_TBL.RANK
FROM Categories AS FT_TBL
INNER JOIN CONTAINSTABLE(Categories, Description, 'ISABOUT (spread WEIGHT (.8), sauces WEIGHT (.4))') AS KEY_TBL
ON FT_TBL.CategoryID = KEY_TBL.[KEY]
ORDER BY KEY_TBL.RANK DESC;

FREETEXT / FREETEXTTABLE — 自然語言模糊查詢

自動斷詞、移除停用詞、詞幹擴展,類似搜尋引擎體驗:

SELECT CategoryName FROM Categories
WHERE FREETEXT(Description, 'sweetest candy bread and dry meat');

中文限制:SQL Server 內建斷詞器對中文支援有限(早期版本幾乎無效),建議升級至 SQL Server 2012+ 並安裝中文斷詞器,或改用 Elasticsearch 等專業搜尋引擎。

中文全文檢索最佳實踐建議

  1. 啟用中文斷詞器:SQL Server 2012+ 內建,舊版需安裝獨立斷詞器。
  2. 建立全文索引:CREATE FULLTEXT CATALOG → CREATE FULLTEXT INDEX 指定資料行、語言 (LCID 2052 為簡體、1028 為繁體)、變更追蹤模式(自動/手動/排程)。
  3. 優化查詢:優先使用 CONTAINS 精確邏輯;FREETEXT 僅作輔助。
  4. 維護:定期重建/累積填入全文索引,監控填入錯誤日誌。

參考資源

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved