SQL Server 7.0 全文檢索功能與 Index Server 相似,提供強大的自然語言查詢能力。本文詳細說明核心謂詞 CONTAINS、FREETEXT 及其進階語法:邏輯運算、鄰近搜尋、詞幹變化、前綴比對、加權排序,並對中文支援現況說明。
精確詞彙/片語比對,支援布林邏輯:
-- AND 邏輯
SELECT username FROM member WHERE CONTAINS(userinfo, '"作家" AND "木匠"')
-- OR 邏輯
SELECT username FROM member WHERE CONTAINS(userinfo, '"作家" OR "木匠"')
-- NOT 邏輯
SELECT username FROM member WHERE CONTAINS(userinfo, '"作家" AND NOT "木匠"')
找出兩詞距離較近的文件:
SELECT Content FROM MicrosoftRecord
WHERE CONTAINS(Content, '"比爾·蓋茨" NEAR "保羅·艾倫"')
表示文件同時包含兩詞且距離不遠 (預設約 50 個詞內)。
自動比對動詞時態、名詞單複數等變化 (主要適用英文):
SELECT ProductName FROM Products
WHERE CONTAINS(ProductName, 'FORMSOF (INFLECTIONAL, dry)')
可比中 dry、dried、dries、drying 等。中文無詞幹變化,此功能對中文無效。
比對詞首開頭相同的詞 (適用英文字母語言):
SELECT ProductName FROM Products
WHERE CONTAINS(ProductName, '"dis*"')
可比中 display、distance、disk 等。中文無前綴概念,此功能對中文無效。
為不同搜尋條件指定權重 (0.0~1.0),影響回傳順序:
SELECT CategoryName, Description FROM Categories
WHERE CONTAINS(Description, 'ISABOUT (spread WEIGHT(.8), sauces WEIGHT(.4), relishes WEIGHT(.2))')
回傳資料表 (含 KEY、RANK 欄位),可進一步 JOIN 排序:
SELECT ft.TITLE, ft.RANK
FROM FREETEXTTABLE(Products, Description, 'sweet bread') ft
JOIN Products p ON p.ProductID = ft.[KEY]
ORDER BY ft.RANK DESC
自動斷詞、濾除停用詞、套用詞幹變化,進行模糊比對 (類似搜尋引擎):
SELECT CategoryName FROM Categories
WHERE FREETEXT(Description, 'sweetest candy bread and dry meat')
中文支援: SQL Server 7.0 內建斷詞器僅支援英文/歐洲語系,中文全文檢索需安裝第三方中文斷詞器 (如微軟後續版本內建的中文斷詞器) 才能正確運作。
LANGUAGE 'CHINESE' 或 LANGUAGE 'TRADITIONAL CHINESE'。noise.cht/noise.chs) 可自訂停用詞。CONTAINS 精確比較,FREETEXT 召回率較高但精確度較低。掌握全文檢索語法與中文支援現況,能為應用系統建立強大的文件搜尋能力。