共計 5651 個字符,預(yù)計需要花費(fèi) 15 分鐘才能閱讀完成。
SQLServer 怎樣全文檢索 full-text 語法,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面丸趣 TV 小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。
sql server 全文檢索有兩種搜索方式,一種是 contains,另一種是 freetext。前者是包含,類似于 like % 關(guān)鍵詞 %,后者則是將一段文字分詞以后對每個詞進(jìn)行搜索。具體語法:contains:SELECT 字段 1, 字段 2 FROM 表名 WHERE contains(字段, 詞一 or 詞二) 根據(jù)查找結(jié)果的相似度排序 SELECT 字段 1, 字段 2 FROM 表名 inner join containstable(表名, 字段, 詞一 or 詞二 ,10) as k on 表名.id = k.[key] order by k.RANK DESC freetext: SELECT 字段 1, 字段 2 FROM 表名 WHERE freetext(字段, 詞一詞二) 根據(jù)查找結(jié)果的相似度排序 SELECT 字段 1, 字段 2 FROM 表名 inner join freetexttable(表名, 字段, 詞一詞二 ,10) as k on 表名.id = k.[key] order by k.RANK DESC 上文中 freetexttable 或 containstable 的 10 表示取 10 條數(shù)據(jù)
最近搜索了一下全文檢索, 發(fā)現(xiàn)了一些問題, 現(xiàn)在總結(jié)如下: 全文索引和查詢概念 (摘自 SQL 聯(lián)機(jī)幫助) 全文索引、查詢和同步化最主要的設(shè)計要求是,在注冊進(jìn)行全文檢索的所有表上都有一個唯一的全文鍵列(或者單列主鍵)。全文索引對使用的重要字及其所在位置進(jìn)行跟蹤。例如,假定有一個對 DevTools 表的全文索引。全文索引可能指出在 Abstract 列的第 423 個和第 982 個單詞處找到了單詞 Microsoft,所在的行與 ProductID6 關(guān)聯(lián)。該索引結(jié)構(gòu)支持對所有包含被索引單詞的項進(jìn)行有效檢索,以及高級檢索操作,如短語檢索和鄰近檢索。為防止全文索引因包含很多對檢索沒有幫助的詞而變得臃腫,a、and、is 或 the 這類額外的詞都忽略不計。例如,指定 theproductsorderedduringthesesummermonths 與指定 productsorderedduringsummermonths 是一樣的。有這兩個字符串的行都會被返回。目錄 \Mssql\Ftdata\Sqlserver\Config 下提供了多種語言的干擾詞列表。在安裝帶有全文檢索支持的 Microsoft reg;SQLServer?時會創(chuàng)建這個目錄,并同時安裝干擾詞文件。干擾詞文件可以編輯。例如,高技術(shù)公司的系統(tǒng)管理員可以把單詞 computer 添加到他們的干擾詞表中去。(如果編輯干擾詞文件,則必須在更改生效之前重新填充全文目錄。)下表顯示了干擾詞文件及其相應(yīng)的語言。干擾詞文件語言 ———————–Noise.chs 簡體中文 Noise.cht 繁體中文 Noise.dat 語言中性 Noise.deu 德語 Noise.eng 英語(英國)Noise.enu 英語(美國)Noise.esn 西班牙語 Noise.fra 法語 Noise.ita 意大利語 Noise.jpn 日語 Noise.kor 韓文 Noise.nld 荷蘭語 Noise.sve 瑞典語在處理全文查詢時,檢索引擎將滿足檢條件的行的鍵值返回給 MicrosoftSQLServer。比如有一個 SciFi 表,其中 Book_No 列是主鍵列。Book_NoWriterTitle———————————————A025AsimovFoundation sEdgeA027AsimovFoundationandEmpireC011ClarkeChildhood sEndV109VerneMysteriousIsland 假定想使用一個全文檢索查詢來查找包含單詞 Foundation 的書名。在本例中,將從全文索引獲得值 A025 和 A027。然后 SQLServer 用這些鍵值和其它欄的信息響應(yīng)該查詢。下表顯示了存儲全文索引數(shù)據(jù)所使用的語言。這些語言基于 SQLServer 安裝期間選擇的 Unicode 排序規(guī)則區(qū)域設(shè)置標(biāo)識符。Unicode 排序規(guī)則區(qū)域設(shè)置標(biāo)識符全文數(shù)據(jù)存儲所用的語言 —————————————————— 中文注音符號(臺灣)繁體中文漢語拼音簡體中文中文筆畫簡體中文中文筆畫(臺灣)繁體中文荷蘭語荷蘭語英語(英國)英語(英國)法語法語通用 Unicode 英語(美國)德語德語德文電話簿德語意大利語意大利語日語日語日語 Unicode 日語韓文韓文韓文 Unicode 韓文西班牙語(現(xiàn)代)西班牙語瑞典 / 芬蘭語瑞典語此列表中沒有的其它所有 Unicode 排序規(guī)則區(qū)域設(shè)置標(biāo)識符值都映射到使用空格分隔單詞的中性語言單詞的斷字符和詞干分隔符。說明 Unicode 排序規(guī)則區(qū)域設(shè)置標(biāo)識符設(shè)置用于所有可進(jìn)行全文索引的數(shù)據(jù)類型(如 char、nchar 等)。如果為 char、varchar 或 text 類型列的排序次序設(shè)置的語言類型,不是 Unicode 排序規(guī)則區(qū)域設(shè)置標(biāo)識符語言,那么在對 char、varchar 和 text 類型的列進(jìn)行全文索引和查詢時,仍然使用 Unicode 排序規(guī)則區(qū)域設(shè)置標(biāo)識符值。創(chuàng)建全文索引 (以索引 image 列為例, 其他類型字段大致一樣) 標(biāo)題全文索引 image 列,全攻略!作者 pengdali[原作]關(guān)鍵字全文索引 image 今天“百年不遇”的停電了,看了一天書。晚上搞了一下全文索引,決定把心得貼出來,我盡量寫的詳細(xì),大家共同學(xué)習(xí),歡迎指正!1、啟動 MicrosoftSearch 服務(wù)開始菜單 – SQL 程序組 – 服務(wù)管理器 – 下拉筐 – MicrosoftSearch 服務(wù) – 啟動它 2、..\MicrosoftSQLServer\MSSQL\FTDATA\SQLServer\Config\ 目錄里建一個非空 noise.chs 文件非空 noise.chs 文件,也有人說是空的 noise.chs 文件,但我每次都往里寫幾個沒用的字母。3、建立環(huán)境打開查詢分析器 – 執(zhí)行下列腳本:——————————————–createdatabasetest— 創(chuàng)建 test 數(shù)據(jù)庫 usetest— 選擇 test 數(shù)據(jù)庫 createtabledali(IDintnotnullprimarykey,MyImageimage,FileTypevarchar(255),FileNmaevarchar(255))— 創(chuàng)建 dali 表 –dali 表中 Id,MyImage,FileType 三列是必須的,因為要對 image 列索引的話,必須要有一個主鍵列,一個 image 列, 一個存放文件類型的列 – 我們知道在 windows 系統(tǒng)中文件類型是靠擴(kuò)展名來區(qū)分的所以 FileType 列也就是用來放文件的擴(kuò)展名 ——————————————–sp_fulltext_database enable – 為全文索引啟用數(shù)據(jù)庫 sp_fulltext_catalog My_FullDir , create — 創(chuàng)建一個叫 My_FullDif 的全文目錄 declare@Keysysname;select@Key=c.namefromsyscolumnsa,sysconstraintsb,sysobjectscwherea.id=object_id(dali)anda.name= ID anda.id=b.idandb.constid=c.idandc.namelike PK% execsp_fulltext_table dali , create , My_FullDir ,@Key—- 這兩句是為全文索引, 對表進(jìn)行標(biāo)記 sp_fulltext_column dali , MyImage , add ,0x0804, FileType — 這句是指定 MyImage 列為全文索引列,FileType 是類型列 ————————————————4、在 c 盤下放一個擴(kuò)展名為 doc 的 word 文件, 一個擴(kuò)展名為 xls 的 excel 文件, 一個擴(kuò)展名為 htm 的網(wǎng)頁文件, 個擴(kuò)展名為 bmp 的圖片共 4 個,大家可根據(jù)實際情況放入!5、插入數(shù)據(jù)建立下面這個存儲過程 ————————————————–CREATEPROCEDUREsp_textcopy@srvnamevarchar(30),@loginvarchar(30),@passwordvarchar(30),@dbnamevarchar(30),@tbnamevarchar(30),@colnamevarchar(30),@filenamevarchar(30),@whereclausevarchar(40),@directionchar(1)AS/* 這是使用 textcopy 工具將文件插入到數(shù)據(jù)庫中,如果有前臺工具可以用前臺開發(fā)工具將文件插入,這里為了演示 */DECLARE@exec_strvarchar(255)SELECT@exec_str= textcopy/S +@srvname+ /U +@login+ /P +@password+ /D +@dbname+ /T +@tbname+ /C +@colname+ /W +@whereclause+ /F +@filename+ / +@directionEXECmaster..xp_cmdshell@exec_str—————————————————-insertdalivalues(1,0x, doc , 大力的 doc)— 其中第二列是 0x 它是一個 16 進(jìn)制數(shù)對應(yīng) image 列, 是必須的, 不要寫 null, 第三列是文件類型,既擴(kuò)展名 sp_textcopy 你的服務(wù)器名 , sa , 你的密碼 , test , dali , MyImage , c:\ 大力的 doc.doc , whereID=1 , I ——- 依次參數(shù)是:實例名, 用戶名, 密碼,數(shù)據(jù)庫名,表名,image 列名,路徑及文件名,條件(你必須保證它只選擇一行),I———————————————————————————————————————insertdalivalues(2,0x, bmp , 圖片)sp_textcopy 你的服務(wù)器名 , sa , 你的密碼 , test , dali , MyImage , c:\ 圖片.bmp , whereID=2 , I – 注意條件是 ID=2insertdalivalues(3,0x, xls , Excel 文件)sp_textcopy 你的服務(wù)器名 , sa , 你的密碼 , test , dali , MyImage , c:\Excel 文件.xls , whereID=3 , I – 注意條件是 ID=3insertdalivalues(4,0x, htm , 網(wǎng)頁)sp_textcopy 你的服務(wù)器名 , sa , 你的密碼 , test , dali , MyImage , c:\ 網(wǎng)頁.htm , whereID=4 , I – 注意條件是 ID=4———- 上面的語句, 要保證類型一樣,路徑正確,條件唯一正確應(yīng)該就可以了 6、填充全文索引 sp_fulltext_table dali , start_full — 第一個參數(shù)是表名,第二個參數(shù)是啟動表的全文索引的完全填充 7、可以開始你的實驗了 select*fromdaliwherecontains(MyImage, J 老師)select*fromdaliwherecontains(MyImage, 海老師)——END———— 調(diào)試環(huán)境:SQLServer2000 企業(yè)版、Windows2000 高級服務(wù)器全文索引中的幾個問題:1. 搜索時出現(xiàn)錯誤: 服務(wù)器: 消息 7619,級別 16,狀態(tài) 1,行 2 查詢子句只包含被忽略的詞這種情況修改 \Mssql\Ftdata\Sqlserver\Config 下對應(yīng)語言的干擾詞列表文件 2. 修改了干擾詞文件, 查詢中文時仍然出現(xiàn)上述問題 a. 首先檢查你的 SQL 有沒有安裝最新的補(bǔ)丁, 檢查的方法是在查詢分析器中運(yùn)行:select@@version 如果出來的版本號是 8.00.760 以下, 則表明你未安裝 sp3 的補(bǔ)丁, 要裝上.SQL 補(bǔ)丁下載:http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn FamilyID=9032f608-160a-4537-a2b6-4cb265b80766 注意下載后, 執(zhí)行的時候是解壓, 要在解壓后的目錄中執(zhí)行 setup.bat 才是真正的安裝 b. 配置全文索引時, 單詞斷字符選擇 中文(中國) c.Noise.chs 文件中至少有一個單詞, 例如:?d. 如果在全文檢索時, 你能正常修改干擾詞文件, 說明你的全文檢索沒有使用上這個文件如果你配置的全文檢索應(yīng)該要用到這個文件, 那就在企業(yè)管理器 – 展開你的數(shù)據(jù)庫 – 右鍵全文目錄 – 重建全部全文目錄 3. 表中的數(shù)據(jù)改變后, 檢索不到方法 1. 右鍵你的表 – 全文索引表 – 啟用增量填充方法 2. 右鍵你的表 – 全文索引表 – 更改跟蹤, 這樣以后的修改會自動填充(有一定延遲)4.sql2000 才支持對 image 列的全文檢索
看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注丸趣 TV 行業(yè)資訊頻道,感謝您對丸趣 TV 的支持。