SQLServer 全文檢索(full-text)語法。本站提示廣大學習愛好者:(SQLServer 全文檢索(full-text)語法)文章只能為提供參考,不一定能成為您想要的結果。以下是SQLServer 全文檢索(full-text)語法正文
比來搜刮了一下全文檢索,發明了一些成績,如今總結以下:
全文索引和查詢概念(摘自SQL 聯機贊助)
全文索引、查詢和同步化最重要的設計請求是,在注冊停止全文檢索的一切表上都有一個獨一的全文鍵列(或許單列主鍵)。全文索引對應用的主要字及其地點地位停止跟蹤。
例如,假定有一個對 DevTools 表的全文索引。全文索引能夠指出在 Abstract 列的第 423 個和第 982 個單詞處找到了單詞 Microsoft,地點的行與 ProductID 6 聯系關系。該索引構造支撐對一切包括被索引單詞的項停止有用檢索,和高等檢索操作,如短語檢索和臨近檢索。
為避免全文索引因包括許多對檢索沒有贊助的詞而變得癡肥,a、and、is 或 the 這類額定的詞都疏忽不計。例如,指定"the products ordered during these summer months"與指定"products ordered during summer months"是一樣的。有這兩個字符串的行都邑被前往。
目次 \Mssql\Ftdata\Sqlserver\Config 下供給了多種說話的攪擾詞列表。在裝置帶有全文檢索支撐的 Microsoft® SQL Server™ 時會創立這個目次,並同時裝置攪擾詞文件。攪擾詞文件可以編纂。例如,高技巧公司的體系治理員可以把單詞 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 瑞典語
在處置全文查詢時,檢索引擎將知足檢前提的行的鍵值前往給 Microsoft SQL Server。好比有一個 SciFi 表,個中 Book_No 列是主鍵列。
Book_No Writer Title
-------- ----------- --------------------------
A025 Asimov Foundation's Edge
A027 Asimov Foundation and Empire
C011 Clarke Childhood's End
V109 Verne Mysterious Island
假定想應用一個全文檢索查詢來查找包括單詞 Foundation 的書名。在本例中,將從全文索引取得值 A025 和 A027。然後 SQL Server 用這些鍵值和其它欄的信息呼應該查詢。
下表顯示了存儲全文索引數據所應用的說話。這些說話基於 SQL Server 裝置時代選擇的 Unicode 排序規矩區域設置標識符。
Unicode 排序規矩區域設置標識符 全文數據存儲所用的說話
------------------------------- -----------------------
中文注音符號(台灣) 繁體中文
漢語拼音 簡體中文
中文筆劃 簡體中文
中文筆劃(台灣) 繁體中文
荷蘭語 荷蘭語
英語(英國) 英語(英國)
法語 法語
通用 Unicode 英語(美國)
德語 德語
德文德律風簿 德語
意年夜利語 意年夜利語
日語 日語
日語 Unicode 日語
韓文 韓文
韓文 Unicode 韓文
西班牙語(古代) 西班牙語
瑞典/芬蘭語 瑞典語
此列表中沒有的其它一切 Unicode 排序規矩區域設置標識符值都映照到應用空格分隔單詞的中性說話單詞的斷字符和詞干分隔符。
解釋 Unicode 排序規矩區域設置標識符設置用於一切可停止全文索引的數據類型(如 char、nchar 等)。假如為 char、varchar 或 text 類型列的排次序序設置的說話類型,不是 Unicode 排序規矩區域設置標識符說話,那末在對 char、varchar 和 text 類型的列停止全文索引和查詢時,依然應用 Unicode 排序規矩區域設置標識符值。
創立全文索引(以索引image列為例,其他類型字段年夜致一樣)
題目 全文索引image列,全攻略!
作者 pengdali [原作]
症結字 全文索引 image
明天“千載難逢”的停電了,看了一天書。早晨弄了一下全文索引,決議把心得貼出來,我盡可能寫的具體,年夜家配合進修,迎接斧正!
1、啟動 Microsoft Search 辦事
開端菜單-->SQL法式組-->辦事治理器-->下拉筐-->Microsoft Search 辦事-->啟動它
2、
..\Microsoft SQL Server\MSSQL\FTDATA\SQLServer\Config\目次裡建一個非空noise.chs文件
非空noise.chs文件,也有人說是空的noise.chs文件,但我每次都往裡寫幾個沒用的字母。
3、樹立情況
翻開查詢剖析器-->履行以下劇本:
--------------------------------------------
create database test ---創立test數據庫
use test ---選擇test數據庫
create table dali (ID int not null primary key,MyImage image,FileType varchar(255),FileNmae varchar(255)) ---創立dali表
--dali表中 Id,MyImage,FileType 三列是必需的,由於要對image列索引的話,必需要有一個主鍵列,一個image列,一個寄存文件類型的列
--我們曉得在windows體系中文件類型是靠擴大名來辨別的所以FileType列也就是用來放 文件的擴大名
--------------------------------------------
sp_fulltext_database 'enable' --為全文索引啟用數據庫
sp_fulltext_catalog 'My_FullDir', 'create' ---創立一個叫My_FullDif的全文目次
declare @Key sysname ; select @Key=c.name from syscolumns a,sysconstraints b,sysobjects c where a.id=object_id('dali') and a.name='ID' and a.id=b.id and b.constid=c.id and c.name like 'PK%'
exec sp_fulltext_table 'dali','create','My_FullDir',@Key ----這兩句是為全文索引,對表停止標志
sp_fulltext_column 'dali','MyImage','add',0x0804,'FileType' ---這句是指定MyImage列為全文索引列,FileType是類型列
------------------------------------------------
4、在c盤下放一個擴大名為doc的word文件,一個擴大名為xls的excel文件,一個擴大名為htm的網頁文件,個擴大名為bmp的圖片
共4個,年夜家可依據現實情形放入!
5、拔出數據
樹立上面這個存儲進程
--------------------------------------------------
CREATE PROCEDURE sp_textcopy
@srvname varchar (30),
@login varchar (30),
@password varchar (30),
@dbname varchar (30),
@tbname varchar (30),
@colname varchar (30),
@filename varchar (30),
@whereclause varchar (40),
@direction char(1)
AS
/* 這是應用textcopy對象將文件拔出到數據庫中,假如有前台對象可以用前台開辟對象將文件拔出,這裡為了演示 */
DECLARE @exec_str varchar (255)
SELECT @exec_str='textcopy /S '+@srvname+' /U '+@login+' /P '+@password+' /D '+@dbname+' /T'+@tbname+' /C '+@colname+' /W"'+@whereclause+'" /F"'+@filename+'" /'+@direction
EXEC master..xp_cmdshell @exec_str
----------------------------------------------------
insert dali values(1,0x,'doc','年夜力的doc') ---個中第二列是 0x 它是一個16進制數對應image列,是必需的,不要寫null,第三列是文件類型,既擴大名
sp_textcopy '你的辦事器名','sa','你的暗碼','test','dali','MyImage','c:\年夜力的doc.doc','where ID=1','I'
-------順次參數是:實例名,用戶名,暗碼,數據庫名,表名,image列名,途徑及文件名,前提(你必需包管它只選擇一行),I
---------------------------------------------------------------------------------------------------------------------
insert dali values(2,0x,'bmp','圖片')
sp_textcopy '你的辦事器名','sa','你的暗碼','test','dali','MyImage','c:\圖片.bmp','where ID=2','I' --留意前提是 ID=2
insert dali values(3,0x,'xls','Excel文件')
sp_textcopy '你的辦事器名','sa','你的暗碼','test','dali','MyImage','c:\Excel文件.xls','where ID=3','I' --留意前提是 ID=3
insert dali values(4,0x,'htm','網頁')
sp_textcopy '你的辦事器名','sa','你的暗碼','test','dali','MyImage','c:\網頁.htm','where ID=4','I' --留意前提是 ID=4
----------下面的語句,要包管類型一樣,途徑准確,前提獨一准確應當便可以了
6、填充全文索引
sp_fulltext_table 'dali','start_full' ---第一個參數是表名,第二個參數是啟動表的全文索引的完整填充
7、可以開端你的試驗了
select * from dali where contains(MyImage,'J先生')
select * from dali where contains(MyImage,'海先生')
------END----------
--調試情況:SQLServer2000企業版、Windows2000高等辦事器
全文索引中的幾個成績:
1.搜刮時湧現毛病:
辦事器: 新聞 7619,級別 16,狀況 1,行 2
查詢子句只包括被疏忽的詞
這類情形修正 \Mssql\Ftdata\Sqlserver\Config 下對應說話的攪擾詞列表文件
2.修正了攪擾詞文件,查詢中文時依然湧現上述成績
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
留意下載後,履行的時刻是解壓,要在解壓後的目次中履行setup.bat才是真實的裝置
b.設置裝備擺設全文索引時,單詞斷字符選擇"中文(中國)"
c.Noise.chs文件中至多有一個單詞,例如:?
d.假如在全文檢索時,你能正常修正攪擾詞文件,解釋你的全文檢索沒有應用上這個文件
假如你設置裝備擺設的全文檢索應當要用到這個文件,那就在
企業治理器--睜開你的數據庫--右鍵全文目次--重建全體全文目次
3.表中的數據轉變後,檢索不到
辦法1. 右鍵你的表--全文索引表--啟用增量填充
辦法2. 右鍵你的表--全文索引表--更改跟蹤,如許今後的修正會主動填充(有必定延遲)
4.sql2000才支撐對image列的全文檢索