SQL Server 7.0 引入全文檢索服務,支援中文斷詞與多種文件格式索引,大幅優於傳統 LIKE 查詢。本文涵蓋架構概念、安裝設定、ASP 整合與進階查詢語法。
| 方案 | 適用場景 | 優點 | 缺點 |
|---|---|---|---|
LIKE '%關鍵字%' | 小資料量、精確比對 | 語法簡單、無額外設定 | 全表掃描、不支援 Text/NText 欄位、效能差 |
| Microsoft Index Server | 靜態文件搜尋 | 支援 Office/HTML/PDF 等格式 | 非關係資料、難與資料庫即時同步 |
| SQL Server Full-Text Search | 資料庫欄位全文檢索 | 支援 Char/Varchar/Text/NText、中文斷詞、排名相關性 | 需額外安裝、索引維護成本 |
Full-Text Index Table → Define Full-Text Indexing on a TableFull:完整重建索引(適合初始化或結構變更)Incremental:僅索引變更資料(適合定期排程,如每日午夜)Start Population → Full Population-- 基本詞彙
SELECT * FROM Customers WHERE CONTAINS(Address, '台北市')
-- AND/OR/NOT 邏輯
SELECT * FROM Products WHERE CONTAINS(Description, '筆記型 AND 電腦 NOT 二手')
-- 近接搜尋
SELECT * FROM Docs WHERE CONTAINS(Content, 'SQL NEAR Server')
-- 前綴匹配
SELECT * FROM Docs WHERE CONTAINS(Title, '資料*')
-- 以語意匹配,自動展開同義詞、字幹
SELECT * FROM Customers WHERE FREETEXT(Address, '台北市的客戶地址')
<%
Set cn = Server.CreateObject("ADODB.Connection")
cn.Open "Driver={SQL Server};Database=Northwind;Server=(Local);UID=sa;PWD=;"
%>
<%
Set cn = Server.CreateObject("ADODB.Connection")
cn.Provider = "sqloledb"
cn.Open "server=(Local);uid=sa;pwd=;database=Northwind"
%>
<%
keyword = Request("keyword")
sql = "SELECT CustomerID, CompanyName, Address FROM Customers WHERE CONTAINS(Address, '" & keyword & "')"
Set rs = cn.Execute(sql)
Do While Not rs.EOF
Response.Write rs("CustomerID") & " - " & rs("CompanyName") & " - " & rs("Address") & "<br>"
rs.MoveNext
Loop
%>
Incremental 配合 CHANGE_TRACKING AUTOTOP N 限制回傳筆數,避免大量結果集傳輸DBCC CHECKDB 並監控 sys.fulltext_catalogs 狀態版本提醒:SQL Server 2005+ 將全文檢索整合至資料庫引擎,語法擴充(如
CONTAINSTABLE、FREETEXTTABLE回傳排名分數),建議新專案直接採用新版本。