SQL Server全文檢索查詢淺析
更新時間:2009年11月15日 22:57:29 作者:
因為項目需要,需要對上傳的文件內(nèi)容進(jìn)行查詢。通過MSDN了解到Windows索引服務(wù)可以實現(xiàn)對文件的全文檢索,并可以通過SQL Server進(jìn)行查詢。項目將這兩者結(jié)合,實現(xiàn)對上傳文件的全文檢索的解決方案。
方案概要:
1. 改變文件存儲時的文件名
2. 配置索引服務(wù)器,并將索引服務(wù)器與MS SQL Server關(guān)聯(lián)。
3. 修改SQL語句,將進(jìn)行全文查詢語句的內(nèi)容加入查詢條件中
文件的存儲方式:
為了方便存儲以及方便索引,我們將上傳的文件存儲到一個目錄里面,為了保證上傳的文件名不重復(fù),采用GUID作為文件名,并且通過這個GUID于數(shù)據(jù)庫記錄相關(guān)聯(lián)。同時,文件的后綴還保持原始文件的后綴,讓索引服務(wù)能夠識別該文檔。
配置索引服務(wù)
進(jìn)入計算機(jī)管理(Computer Management)程序(右鍵”我的電腦”->”管理”),并找到索引服務(wù)(Index Service)
配置索引服務(wù)的功能
(1)右鍵選擇索引服務(wù)彈出一個菜單
(2)選擇New->Catalog(新建一個編錄)
設(shè)置新增加的編錄
(1)輸入編錄的名字(這個名字需要與數(shù)據(jù)庫進(jìn)行關(guān)聯(lián),要注意命名,這里假設(shè)DCSII
(2)點Browse進(jìn)入選擇索引服務(wù)運行目錄窗體
(3)選擇前面創(chuàng)建的索引運行目錄(任意地方)
(4)點確定完成本次操作
在編錄創(chuàng)建號以后,需要給編錄增加目錄
(1)右鍵選擇剛剛創(chuàng)建的編錄
(2)選擇New->Directory(新建目錄)
新建索引目錄
(1)點擊Browse進(jìn)入目錄選擇頁面
(2)選擇要進(jìn)行全文檢索文件的目錄
(3)確定完成本次操作
完成創(chuàng)建后啟動索引服務(wù)
(1)啟動索引服務(wù)
(2)索引服務(wù)啟動成功后索引編錄的信息,可以看到編錄信息就表示服務(wù)已經(jīng)啟動成功。
將索引服務(wù)和SQL數(shù)據(jù)庫關(guān)聯(lián):
在SQL 查詢分析器(SQL Query Analyer)里執(zhí)行下面的存儲過程
EXEC sp_addlinkedserver Dcs, -- 連接服務(wù)器的名字,到后面查詢的時候要用到
'Index Server',
'MSIDXS',
'DCSII' -- 索引服務(wù)里新建的編錄名字
索引服務(wù)的性能調(diào)整方法1
(1)右鍵選擇索引服務(wù)
(2)選擇 All Tasks-> Tune Perrformance
(3)選擇用戶自定義
(4)點擊Customize進(jìn)入性能調(diào)整窗體
(5)將Index和Querying的屬性移動到最右邊
(6)點確定完成操作
性能調(diào)整方法2
如果服務(wù)器不需要對整個系統(tǒng)的文件進(jìn)行索引,可以停止或者刪除System編錄。
MSSQL對索引服務(wù)器的調(diào)用
1. 通過sql語句查詢連接服務(wù)器的內(nèi)容
SELECT Q.*
FROM OpenQuery(dcs, --連接服務(wù)器名字
'SELECT FileName, Size, DocAuthor, path --在連接服務(wù)器里的sql語句
FROM SCOPE()
WHERE CONTAINS(''番號 and abc'') '
) AS Q
2. 因為SQL語句不支持動態(tài)輸入的字符串,因此查詢字符串只好在C#代碼里進(jìn)行拼接
s.p.
實不用將文件保存到數(shù)據(jù)庫外面也能實現(xiàn)在數(shù)據(jù)庫里實現(xiàn)全文搜索。具體方案是在SQL Server 2000里安全全文搜索功能,用image字段存儲文件內(nèi)容,并新增一個字段存放文件類型,然后在通過企業(yè)管理器新建全文索引項的時候?qū)⑦@兩個字段匹配就可以。不過從數(shù)據(jù)庫的/率以及今后數(shù)據(jù)庫備份和恢復(fù)的效率上來看,將文件放在數(shù)據(jù)庫的設(shè)計不是太好。
1. 改變文件存儲時的文件名
2. 配置索引服務(wù)器,并將索引服務(wù)器與MS SQL Server關(guān)聯(lián)。
3. 修改SQL語句,將進(jìn)行全文查詢語句的內(nèi)容加入查詢條件中
文件的存儲方式:
為了方便存儲以及方便索引,我們將上傳的文件存儲到一個目錄里面,為了保證上傳的文件名不重復(fù),采用GUID作為文件名,并且通過這個GUID于數(shù)據(jù)庫記錄相關(guān)聯(lián)。同時,文件的后綴還保持原始文件的后綴,讓索引服務(wù)能夠識別該文檔。
配置索引服務(wù)
進(jìn)入計算機(jī)管理(Computer Management)程序(右鍵”我的電腦”->”管理”),并找到索引服務(wù)(Index Service)
配置索引服務(wù)的功能
(1)右鍵選擇索引服務(wù)彈出一個菜單
(2)選擇New->Catalog(新建一個編錄)
設(shè)置新增加的編錄
(1)輸入編錄的名字(這個名字需要與數(shù)據(jù)庫進(jìn)行關(guān)聯(lián),要注意命名,這里假設(shè)DCSII
(2)點Browse進(jìn)入選擇索引服務(wù)運行目錄窗體
(3)選擇前面創(chuàng)建的索引運行目錄(任意地方)
(4)點確定完成本次操作
在編錄創(chuàng)建號以后,需要給編錄增加目錄
(1)右鍵選擇剛剛創(chuàng)建的編錄
(2)選擇New->Directory(新建目錄)
新建索引目錄
(1)點擊Browse進(jìn)入目錄選擇頁面
(2)選擇要進(jìn)行全文檢索文件的目錄
(3)確定完成本次操作
完成創(chuàng)建后啟動索引服務(wù)
(1)啟動索引服務(wù)
(2)索引服務(wù)啟動成功后索引編錄的信息,可以看到編錄信息就表示服務(wù)已經(jīng)啟動成功。
將索引服務(wù)和SQL數(shù)據(jù)庫關(guān)聯(lián):
在SQL 查詢分析器(SQL Query Analyer)里執(zhí)行下面的存儲過程
EXEC sp_addlinkedserver Dcs, -- 連接服務(wù)器的名字,到后面查詢的時候要用到
'Index Server',
'MSIDXS',
'DCSII' -- 索引服務(wù)里新建的編錄名字
索引服務(wù)的性能調(diào)整方法1
(1)右鍵選擇索引服務(wù)
(2)選擇 All Tasks-> Tune Perrformance
(3)選擇用戶自定義
(4)點擊Customize進(jìn)入性能調(diào)整窗體
(5)將Index和Querying的屬性移動到最右邊
(6)點確定完成操作
性能調(diào)整方法2
如果服務(wù)器不需要對整個系統(tǒng)的文件進(jìn)行索引,可以停止或者刪除System編錄。
MSSQL對索引服務(wù)器的調(diào)用
1. 通過sql語句查詢連接服務(wù)器的內(nèi)容
SELECT Q.*
FROM OpenQuery(dcs, --連接服務(wù)器名字
'SELECT FileName, Size, DocAuthor, path --在連接服務(wù)器里的sql語句
FROM SCOPE()
WHERE CONTAINS(''番號 and abc'') '
) AS Q
2. 因為SQL語句不支持動態(tài)輸入的字符串,因此查詢字符串只好在C#代碼里進(jìn)行拼接
s.p.
實不用將文件保存到數(shù)據(jù)庫外面也能實現(xiàn)在數(shù)據(jù)庫里實現(xiàn)全文搜索。具體方案是在SQL Server 2000里安全全文搜索功能,用image字段存儲文件內(nèi)容,并新增一個字段存放文件類型,然后在通過企業(yè)管理器新建全文索引項的時候?qū)⑦@兩個字段匹配就可以。不過從數(shù)據(jù)庫的/率以及今后數(shù)據(jù)庫備份和恢復(fù)的效率上來看,將文件放在數(shù)據(jù)庫的設(shè)計不是太好。
相關(guān)文章
揭秘SQL Server 2014有哪些新特性(4)-原生備份加密
SQL Server原聲備份加密對數(shù)據(jù)安全提供了非常好的解決方案。使用原生備份加密基本不會增加備份文件大小,并且打破了使用透明數(shù)據(jù)加密后幾乎沒有壓縮率的窘境。2014-08-08一個函數(shù)解決SQLServer中bigint 轉(zhuǎn) int帶符號時報錯問題
這篇文章主要介紹了解決SQLServer中bigint 轉(zhuǎn) int帶符號時報錯問題的函數(shù),需要的朋友可以參考下2014-08-08sql清空表數(shù)據(jù)后重新添加數(shù)據(jù)存儲過程的示例
這篇文章主要介紹了sql清空表數(shù)據(jù)后重新添加數(shù)據(jù)存儲過程的示例,需要的朋友可以參考下2014-04-04SqlServer數(shù)據(jù)庫備份與還原的實現(xiàn)步驟
這篇文章主要介紹了SqlServer數(shù)據(jù)庫備份與還原的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-03-03Sql Server 創(chuàng)建數(shù)據(jù)庫腳本Create DATABASE
這篇文章主要介紹了Sql Server 創(chuàng)建數(shù)據(jù)庫腳本語句Create DATABASE的使用,需要的朋友可以參考下2014-08-08