溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SQLServer怎樣全文檢索full-text語法

發(fā)布時間:2021-10-13 14:59:16 來源:億速云 閱讀:161 作者:柒染 欄目:數(shù)據(jù)庫

SQLServer怎樣全文檢索full-text語法,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

sql server 全文檢索有兩種搜索方式,一種是contains,另一種是freetext。前者是包含,類似于 like '%關鍵詞%',后者則是將一段文字分詞以后對每個詞進行搜索。 具體語法: contains: SELECT 字段1,字段2 FROM 表名 WHERE contains(字段,'"詞一" or "詞二"') 根據(jù)查找結果的相似度排序 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ù)查找結果的相似度排序 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)在總結如下:全文索引和查詢概念(摘自SQL聯(lián)機幫助)全文索引、查詢和同步化最主要的設計要求是,在注冊進行全文檢索的所有表上都有一個唯一的全文鍵列(或者單列主鍵)。全文索引對使用的重要字及其所在位置進行跟蹤。例如,假定有一個對DevTools表的全文索引。全文索引可能指出在Abstract列的第423個和第982個單詞處找到了單詞Microsoft,所在的行與ProductID6關聯(lián)。該索引結構支持對所有包含被索引單詞的項進行有效檢索,以及高級檢索操作,如短語檢索和鄰近檢索。為防止全文索引因包含很多對檢索沒有幫助的詞而變得臃腫,a、and、is或the這類額外的詞都忽略不計。例如,指定"theproductsorderedduringthesesummermonths"與指定"productsorderedduringsummermonths"是一樣的。有這兩個字符串的行都會被返回。目錄\Mssql\Ftdata\Sqlserver\Config下提供了多種語言的干擾詞列表。在安裝帶有全文檢索支持的Microsoft®SQLServer?時會創(chuàng)建這個目錄,并同時安裝干擾詞文件。干擾詞文件可以編輯。例如,高技術公司的系統(tǒng)管理員可以把單詞computer添加到他們的干擾詞表中去。(如果編輯干擾詞文件,則必須在更改生效之前重新填充全文目錄。)下表顯示了干擾詞文件及其相應的語言。干擾詞文件語言-----------------------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用這些鍵值和其它欄的信息響應該查詢。下表顯示了存儲全文索引數(shù)據(jù)所使用的語言。這些語言基于SQLServer安裝期間選擇的Unicode排序規(guī)則區(qū)域設置標識符。Unicode排序規(guī)則區(qū)域設置標識符全文數(shù)據(jù)存儲所用的語言------------------------------------------------------中文注音符號(臺灣)繁體中文漢語拼音簡體中文中文筆畫簡體中文中文筆畫(臺灣)繁體中文荷蘭語荷蘭語英語(英國)英語(英國)法語法語通用Unicode英語(美國)德語德語德文電話簿德語意大利語意大利語日語日語日語Unicode日語韓文韓文韓文Unicode韓文西班牙語(現(xiàn)代)西班牙語瑞典/芬蘭語瑞典語此列表中沒有的其它所有Unicode排序規(guī)則區(qū)域設置標識符值都映射到使用空格分隔單詞的中性語言單詞的斷字符和詞干分隔符。說明Unicode排序規(guī)則區(qū)域設置標識符設置用于所有可進行全文索引的數(shù)據(jù)類型(如char、nchar等)。如果為char、varchar或text類型列的排序次序設置的語言類型,不是Unicode排序規(guī)則區(qū)域設置標識符語言,那么在對char、varchar和text類型的列進行全文索引和查詢時,仍然使用Unicode排序規(guī)則區(qū)域設置標識符值。創(chuàng)建全文索引(以索引image列為例,其他類型字段大致一樣)標題全文索引image列,全攻略!作者pengdali[原作]關鍵字全文索引image今天“百年不遇”的停電了,看了一天書。晚上搞了一下全文索引,決定把心得貼出來,我盡量寫的詳細,大家共同學習,歡迎指正!1、啟動MicrosoftSearch服務開始菜單-->SQL程序組-->服務管理器-->下拉筐-->MicrosoftSearch服務-->啟動它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)中文件類型是靠擴展名來區(qū)分的所以FileType列也就是用來放文件的擴展名--------------------------------------------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----這兩句是為全文索引,對表進行標記sp_fulltext_column'dali','MyImage','add',0x0804,'FileType'---這句是指定MyImage列為全文索引列,FileType是類型列------------------------------------------------4、在c盤下放一個擴展名為doc的word文件,一個擴展名為xls的excel文件,一個擴展名為htm的網(wǎng)頁文件,個擴展名為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進制數(shù)對應image列,是必須的,不要寫null,第三列是文件類型,既擴展名sp_textcopy'你的服務器名','sa','你的密碼','test','dali','MyImage','c:\大力的doc.doc','whereID=1','I'-------依次參數(shù)是:實例名,用戶名,密碼,數(shù)據(jù)庫名,表名,image列名,路徑及文件名,條件(你必須保證它只選擇一行),I---------------------------------------------------------------------------------------------------------------------insertdalivalues(2,0x,'bmp','圖片')sp_textcopy'你的服務器名','sa','你的密碼','test','dali','MyImage','c:\圖片.bmp','whereID=2','I'--注意條件是ID=2insertdalivalues(3,0x,'xls','Excel文件')sp_textcopy'你的服務器名','sa','你的密碼','test','dali','MyImage','c:\Excel文件.xls','whereID=3','I'--注意條件是ID=3insertdalivalues(4,0x,'htm','網(wǎng)頁')sp_textcopy'你的服務器名','sa','你的密碼','test','dali','MyImage','c:\網(wǎng)頁.htm','whereID=4','I'--注意條件是ID=4----------上面的語句,要保證類型一樣,路徑正確,條件唯一正確應該就可以了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高級服務器全文索引中的幾個問題:1.搜索時出現(xiàn)錯誤:服務器:消息7619,級別16,狀態(tài)1,行2查詢子句只包含被忽略的詞這種情況修改\Mssql\Ftdata\Sqlserver\Config下對應語言的干擾詞列表文件2.修改了干擾詞文件,查詢中文時仍然出現(xiàn)上述問題a.首先檢查你的SQL有沒有安裝最新的補丁,檢查的方法是在查詢分析器中運行:select@@version如果出來的版本號是8.00.760以下,則表明你未安裝sp3的補丁,要裝上.SQL補丁下載: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è)管理器--展開你的數(shù)據(jù)庫--右鍵全文目錄--重建全部全文目錄3.表中的數(shù)據(jù)改變后,檢索不到方法1.右鍵你的表--全文索引表--啟用增量填充方法2.右鍵你的表--全文索引表--更改跟蹤,這樣以后的修改會自動填充(有一定延遲)4.sql2000才支持對image列的全文檢索

看完上述內(nèi)容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業(yè)資訊頻道,感謝您對億速云的支持。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI