SQL Server全文檢索查詢淺析
更新時(shí)間:2009年11月15日 22:57:29 作者:
因?yàn)轫?xiàng)目需要,需要對(duì)上傳的文件內(nèi)容進(jìn)行查詢。通過(guò)MSDN了解到Windows索引服務(wù)可以實(shí)現(xiàn)對(duì)文件的全文檢索,并可以通過(guò)SQL Server進(jìn)行查詢。項(xiàng)目將這兩者結(jié)合,實(shí)現(xiàn)對(duì)上傳文件的全文檢索的解決方案。
方案概要:
1. 改變文件存儲(chǔ)時(shí)的文件名
2. 配置索引服務(wù)器,并將索引服務(wù)器與MS SQL Server關(guān)聯(lián)。
3. 修改SQL語(yǔ)句,將進(jìn)行全文查詢語(yǔ)句的內(nèi)容加入查詢條件中
文件的存儲(chǔ)方式:
為了方便存儲(chǔ)以及方便索引,我們將上傳的文件存儲(chǔ)到一個(gè)目錄里面,為了保證上傳的文件名不重復(fù),采用GUID作為文件名,并且通過(guò)這個(gè)GUID于數(shù)據(jù)庫(kù)記錄相關(guān)聯(lián)。同時(shí),文件的后綴還保持原始文件的后綴,讓索引服務(wù)能夠識(shí)別該文檔。
配置索引服務(wù)
進(jìn)入計(jì)算機(jī)管理(Computer Management)程序(右鍵”我的電腦”->”管理”),并找到索引服務(wù)(Index Service)
配置索引服務(wù)的功能
(1)右鍵選擇索引服務(wù)彈出一個(gè)菜單
(2)選擇New->Catalog(新建一個(gè)編錄)
設(shè)置新增加的編錄
(1)輸入編錄的名字(這個(gè)名字需要與數(shù)據(jù)庫(kù)進(jìn)行關(guān)聯(lián),要注意命名,這里假設(shè)DCSII
(2)點(diǎn)Browse進(jìn)入選擇索引服務(wù)運(yùn)行目錄窗體
(3)選擇前面創(chuàng)建的索引運(yùn)行目錄(任意地方)
(4)點(diǎn)確定完成本次操作
在編錄創(chuàng)建號(hào)以后,需要給編錄增加目錄
(1)右鍵選擇剛剛創(chuàng)建的編錄
(2)選擇New->Directory(新建目錄)
新建索引目錄
(1)點(diǎn)擊Browse進(jìn)入目錄選擇頁(yè)面
(2)選擇要進(jìn)行全文檢索文件的目錄
(3)確定完成本次操作
完成創(chuàng)建后啟動(dòng)索引服務(wù)
(1)啟動(dòng)索引服務(wù)
(2)索引服務(wù)啟動(dòng)成功后索引編錄的信息,可以看到編錄信息就表示服務(wù)已經(jīng)啟動(dòng)成功。
將索引服務(wù)和SQL數(shù)據(jù)庫(kù)關(guān)聯(lián):
在SQL 查詢分析器(SQL Query Analyer)里執(zhí)行下面的存儲(chǔ)過(guò)程
EXEC sp_addlinkedserver Dcs, -- 連接服務(wù)器的名字,到后面查詢的時(shí)候要用到
'Index Server',
'MSIDXS',
'DCSII' -- 索引服務(wù)里新建的編錄名字
索引服務(wù)的性能調(diào)整方法1
(1)右鍵選擇索引服務(wù)
(2)選擇 All Tasks-> Tune Perrformance
(3)選擇用戶自定義
(4)點(diǎn)擊Customize進(jìn)入性能調(diào)整窗體
(5)將Index和Querying的屬性移動(dòng)到最右邊
(6)點(diǎn)確定完成操作
性能調(diào)整方法2
如果服務(wù)器不需要對(duì)整個(gè)系統(tǒng)的文件進(jìn)行索引,可以停止或者刪除System編錄。
MSSQL對(duì)索引服務(wù)器的調(diào)用
1. 通過(guò)sql語(yǔ)句查詢連接服務(wù)器的內(nèi)容
SELECT Q.*
FROM OpenQuery(dcs, --連接服務(wù)器名字
'SELECT FileName, Size, DocAuthor, path --在連接服務(wù)器里的sql語(yǔ)句
FROM SCOPE()
WHERE CONTAINS(''番號(hào) and abc'') '
) AS Q
2. 因?yàn)镾QL語(yǔ)句不支持動(dòng)態(tài)輸入的字符串,因此查詢字符串只好在C#代碼里進(jìn)行拼接
s.p.
實(shí)不用將文件保存到數(shù)據(jù)庫(kù)外面也能實(shí)現(xiàn)在數(shù)據(jù)庫(kù)里實(shí)現(xiàn)全文搜索。具體方案是在SQL Server 2000里安全全文搜索功能,用image字段存儲(chǔ)文件內(nèi)容,并新增一個(gè)字段存放文件類型,然后在通過(guò)企業(yè)管理器新建全文索引項(xiàng)的時(shí)候?qū)⑦@兩個(gè)字段匹配就可以。不過(guò)從數(shù)據(jù)庫(kù)的/率以及今后數(shù)據(jù)庫(kù)備份和恢復(fù)的效率上來(lái)看,將文件放在數(shù)據(jù)庫(kù)的設(shè)計(jì)不是太好。
1. 改變文件存儲(chǔ)時(shí)的文件名
2. 配置索引服務(wù)器,并將索引服務(wù)器與MS SQL Server關(guān)聯(lián)。
3. 修改SQL語(yǔ)句,將進(jìn)行全文查詢語(yǔ)句的內(nèi)容加入查詢條件中
文件的存儲(chǔ)方式:
為了方便存儲(chǔ)以及方便索引,我們將上傳的文件存儲(chǔ)到一個(gè)目錄里面,為了保證上傳的文件名不重復(fù),采用GUID作為文件名,并且通過(guò)這個(gè)GUID于數(shù)據(jù)庫(kù)記錄相關(guān)聯(lián)。同時(shí),文件的后綴還保持原始文件的后綴,讓索引服務(wù)能夠識(shí)別該文檔。
配置索引服務(wù)
進(jìn)入計(jì)算機(jī)管理(Computer Management)程序(右鍵”我的電腦”->”管理”),并找到索引服務(wù)(Index Service)
配置索引服務(wù)的功能
(1)右鍵選擇索引服務(wù)彈出一個(gè)菜單
(2)選擇New->Catalog(新建一個(gè)編錄)
設(shè)置新增加的編錄
(1)輸入編錄的名字(這個(gè)名字需要與數(shù)據(jù)庫(kù)進(jìn)行關(guān)聯(lián),要注意命名,這里假設(shè)DCSII
(2)點(diǎn)Browse進(jìn)入選擇索引服務(wù)運(yùn)行目錄窗體
(3)選擇前面創(chuàng)建的索引運(yùn)行目錄(任意地方)
(4)點(diǎn)確定完成本次操作
在編錄創(chuàng)建號(hào)以后,需要給編錄增加目錄
(1)右鍵選擇剛剛創(chuàng)建的編錄
(2)選擇New->Directory(新建目錄)
新建索引目錄
(1)點(diǎn)擊Browse進(jìn)入目錄選擇頁(yè)面
(2)選擇要進(jìn)行全文檢索文件的目錄
(3)確定完成本次操作
完成創(chuàng)建后啟動(dòng)索引服務(wù)
(1)啟動(dòng)索引服務(wù)
(2)索引服務(wù)啟動(dòng)成功后索引編錄的信息,可以看到編錄信息就表示服務(wù)已經(jīng)啟動(dòng)成功。
將索引服務(wù)和SQL數(shù)據(jù)庫(kù)關(guān)聯(lián):
在SQL 查詢分析器(SQL Query Analyer)里執(zhí)行下面的存儲(chǔ)過(guò)程
EXEC sp_addlinkedserver Dcs, -- 連接服務(wù)器的名字,到后面查詢的時(shí)候要用到
'Index Server',
'MSIDXS',
'DCSII' -- 索引服務(wù)里新建的編錄名字
索引服務(wù)的性能調(diào)整方法1
(1)右鍵選擇索引服務(wù)
(2)選擇 All Tasks-> Tune Perrformance
(3)選擇用戶自定義
(4)點(diǎn)擊Customize進(jìn)入性能調(diào)整窗體
(5)將Index和Querying的屬性移動(dòng)到最右邊
(6)點(diǎn)確定完成操作
性能調(diào)整方法2
如果服務(wù)器不需要對(duì)整個(gè)系統(tǒng)的文件進(jìn)行索引,可以停止或者刪除System編錄。
MSSQL對(duì)索引服務(wù)器的調(diào)用
1. 通過(guò)sql語(yǔ)句查詢連接服務(wù)器的內(nèi)容
SELECT Q.*
FROM OpenQuery(dcs, --連接服務(wù)器名字
'SELECT FileName, Size, DocAuthor, path --在連接服務(wù)器里的sql語(yǔ)句
FROM SCOPE()
WHERE CONTAINS(''番號(hào) and abc'') '
) AS Q
2. 因?yàn)镾QL語(yǔ)句不支持動(dòng)態(tài)輸入的字符串,因此查詢字符串只好在C#代碼里進(jìn)行拼接
s.p.
實(shí)不用將文件保存到數(shù)據(jù)庫(kù)外面也能實(shí)現(xiàn)在數(shù)據(jù)庫(kù)里實(shí)現(xiàn)全文搜索。具體方案是在SQL Server 2000里安全全文搜索功能,用image字段存儲(chǔ)文件內(nèi)容,并新增一個(gè)字段存放文件類型,然后在通過(guò)企業(yè)管理器新建全文索引項(xiàng)的時(shí)候?qū)⑦@兩個(gè)字段匹配就可以。不過(guò)從數(shù)據(jù)庫(kù)的/率以及今后數(shù)據(jù)庫(kù)備份和恢復(fù)的效率上來(lái)看,將文件放在數(shù)據(jù)庫(kù)的設(shè)計(jì)不是太好。
相關(guān)文章
SQL2000中改名和刪除默認(rèn)sa帳號(hào)的最安全方法
眾所周知,在M$sql中有個(gè)絕對(duì)是網(wǎng)絡(luò)安全中的隱患的帳號(hào)sa,系統(tǒng)管理員 (sa),默認(rèn)情況下,它指派給固定服務(wù)器角色 sysadmin,并不能進(jìn)行更改。2008-03-03
SQL Server 2005數(shù)據(jù)庫(kù)還原錯(cuò)誤的經(jīng)典解決方案
本文主要介紹了一個(gè)SQL Server 2005數(shù)據(jù)庫(kù)還原過(guò)程中的錯(cuò)誤的解決方案,需要的朋友可以參考下2015-08-08
SQLServer代理中如何給操作員發(fā)送事件警報(bào)郵件
在所有的SQL?Server系統(tǒng)中至少要配置一個(gè)操作員,這會(huì)保證對(duì)于大多數(shù)嚴(yán)重錯(cuò)誤,一些特定的提醒會(huì)發(fā)給你,當(dāng)然,發(fā)送郵件警報(bào)的話需要SQL?Server能發(fā)送郵件警報(bào),另外,當(dāng)警報(bào)觸發(fā)時(shí)可以執(zhí)行作業(yè)意味著你可以通過(guò)自動(dòng)化操作修正很多常規(guī)錯(cuò)誤,而不需要每次都人為干預(yù)錯(cuò)誤發(fā)生2025-03-03
sql server建表時(shí)設(shè)置ID字段自增的簡(jiǎn)單方法
這篇文章主要介紹了 sql server建表時(shí)設(shè)置ID字段自增的簡(jiǎn)單方法,需要的朋友可以參考下2017-10-10
union組合結(jié)果集時(shí)的order問(wèn)題
如果能確定各查詢結(jié)果不會(huì)有重復(fù)的項(xiàng),最好就帶上all,因?yàn)檫@樣還是可以提高一些效率的。2009-09-09
sql server服務(wù)無(wú)法啟動(dòng)的解決方案
sql server軟件是一款關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),具有使用方便可伸縮性好與相關(guān)軟件集成程度高等優(yōu)點(diǎn),我們?cè)跀?shù)據(jù)編程操作時(shí)經(jīng)常會(huì)使用這款編程軟件,在編程時(shí)系統(tǒng)有時(shí)會(huì)提示sql server服務(wù)無(wú)法啟動(dòng),那么大家該如何正常啟動(dòng)呢,下面就由小編來(lái)給大家介紹一下如何解決2023-11-11
c語(yǔ)言http請(qǐng)求解析表單內(nèi)容
c語(yǔ)言解析http請(qǐng)求表單內(nèi)容,基于C語(yǔ)言的CGI開(kāi)發(fā),大家參考使用吧2013-12-12
SQL根據(jù)指定分隔符分解字符串實(shí)現(xiàn)步驟
想要在MS SQL中根據(jù)給定的分隔符把這個(gè)字符串分解成各個(gè)元素,本文將詳細(xì)介紹此功能的實(shí)現(xiàn),需要了解的朋友可以參考下2012-11-11
Sql Server 如何去掉內(nèi)容里面的Html標(biāo)簽
這篇文章主要介紹了Sql Server 去掉內(nèi)容里邊的Html標(biāo)簽的實(shí)現(xiàn)方法,代碼超簡(jiǎn)單,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-05-05

