关于SQLSERVER的全文目录跟全文索引的区别
很久沒(méi)有寫(xiě)隨筆了,本來(lái)之前想寫(xiě)一篇關(guān)于SQLSERVER全文索引的隨筆,可惜沒(méi)有時(shí)間,一直拖到現(xiàn)在才有時(shí)間寫(xiě),不好意思讓各位久等了~
先介紹一下SQLSERVER中的存儲(chǔ)類對(duì)象,哈哈,先介紹一下概念嘛,讓新手老手都有一個(gè)認(rèn)知
SQLSERVER Management Studio將【全文目錄】、【分區(qū)函數(shù)】以及【分區(qū)方案】節(jié)點(diǎn)納入其【對(duì)象資源管理器】的【存儲(chǔ)】節(jié)點(diǎn)之中,
如下圖所示:
正文來(lái)了!哈哈,有請(qǐng)主角:全文目錄
全文目錄
數(shù)據(jù)庫(kù)【存儲(chǔ)】|【全文目錄】節(jié)點(diǎn)是用于保存和管理【全文索引】的節(jié)點(diǎn)。全文目錄通常是由同一數(shù)據(jù)庫(kù)中的零個(gè)或多個(gè)數(shù)據(jù)表的全文索引構(gòu)成的。
需要注意的是,只能為每個(gè)數(shù)據(jù)表創(chuàng)建一個(gè)全文索引。因此,一旦在某個(gè)數(shù)據(jù)表上創(chuàng)建了全文索引,那么該數(shù)據(jù)表將只能隸屬于一個(gè)全文目錄。換言之,
一個(gè)數(shù)據(jù)庫(kù)可以包含一個(gè)或多個(gè)全文目錄,一個(gè)全文目錄可以包含一個(gè)或多個(gè)全文索引,但一個(gè)數(shù)據(jù)表只能有一個(gè)數(shù)據(jù)庫(kù)全文目錄和全文索引(跟mysql一樣)。
在SQLSERVER2005中使用全文索引的主要步驟如下:
(1)首先需要?jiǎng)?chuàng)建全文目錄。
(2)然后將需要?jiǎng)?chuàng)建全文索引的數(shù)據(jù)表中的數(shù)據(jù)填充到全文目錄中。這一過(guò)程也被稱為填充全文索引。
(3)完成上述兩步之后,即可開(kāi)始使用全文索引功能。
創(chuàng)建全文目錄的方法非常簡(jiǎn)單。通過(guò)SSMS以及T-SQL都可以實(shí)現(xiàn)創(chuàng)建全文目錄的功能。
至于具體的創(chuàng)建步驟嘛,這里就不說(shuō)了,網(wǎng)上都有文章說(shuō)明,我就不轉(zhuǎn)載了
最后說(shuō)一下全文索引的優(yōu)缺點(diǎn)和注意事項(xiàng):
(1)全文索引可對(duì)char、varchar、nchar、nvarchar、text、ntext、image、xml、varbinary或varbinary(max)類型字段進(jìn)行檢索,
是解決海量數(shù)據(jù)模糊查詢的好辦法。
(2)一個(gè)表只能建立一個(gè)全文索引(但可以對(duì)多個(gè)字段)。
(3)與like的比較 MSDN解釋
與全文搜索不同,LIKE Transact-SQL 謂詞僅對(duì)字符模式( char、varchar、nchar、nvarchar)有效。另外,不能使用 LIKE 謂詞來(lái)查詢格式化的二進(jìn)制數(shù)據(jù)。此外,對(duì)大量非結(jié)構(gòu)化的文本數(shù)據(jù)執(zhí)行 LIKE 查詢要比對(duì)相同數(shù)據(jù)執(zhí)行同樣的全文查詢慢得多。對(duì)數(shù)百萬(wàn)行文本數(shù)據(jù)進(jìn)行的 LIKE 查詢可能需要幾分鐘的時(shí)間才能返回結(jié)果;而對(duì)于同樣的數(shù)據(jù),全文查詢只需要幾秒甚至更少的時(shí)間,具體取決于返回的行數(shù)及其大小。另一個(gè)考慮因素是 LIKE 僅對(duì)整個(gè)表執(zhí)行簡(jiǎn)單模式掃描。相反,全文查詢可識(shí)別語(yǔ)言,它在索引和查詢時(shí)應(yīng)用特定的轉(zhuǎn)換,例如,篩選非索引字并進(jìn)行同義詞庫(kù)和變形擴(kuò)展。這些轉(zhuǎn)換可幫助全文查詢改進(jìn)其撤回以及結(jié)果的最終排名
最最后,講一下全文索引的用法:
SQL Server 2000和SQLSERVER2005提供的全文檢索語(yǔ)句主要有CONTAINS和FREETEXT。
(1)CONTAINS語(yǔ)句的功能是在表的所有列或指定列中搜索:一個(gè)字或短語(yǔ);一個(gè)字或短語(yǔ)的前綴;與一個(gè)字相近的另一個(gè)字;一個(gè)字的派生字;一個(gè)重復(fù)出現(xiàn)的字。
(2)FREETEXT語(yǔ)句的功能是在一個(gè)表的所有列或指定列中搜索一個(gè)自由文本格式的字符串,并返回與該字符串匹配的數(shù)據(jù)行。所以,F(xiàn)REETEXT語(yǔ)句所執(zhí)行的功能又稱做自由式全文查詢。
T-SQL語(yǔ)句
1 USE pratice 2 3 SELECT * FROM dbo.test WHERE CONTAINS(d,'基數(shù)行')
pratice是我的一個(gè)測(cè)試數(shù)據(jù)庫(kù),d是test表的其中一個(gè)字段,以上T-SQL語(yǔ)句的意思是查找d字段里包含字符串"基數(shù)行"的記錄
--下列 T-SQL 指令碼示範(fàn)查詢?nèi)臋z索索引狀態(tài)以及其內(nèi)容。
SELECT * FROM sys.dm_fts_index_population
SELECT * FROM sys.dm_fts_index_keywords( DB_ID('tde'), OBJECT_ID('SalesLT.Product'))
http://blogs.technet.com/b/technet_taiwan/archive/2015/06/02/sql-database-new-features-tde-and-full-text-search.aspx
填充的方式有3種:1、完全填充,2、增量填充,3、自動(dòng)跟蹤更改
f
f
f
f
f
sql2008 的全文索引現(xiàn)在是存儲(chǔ)在數(shù)據(jù)庫(kù)中
全文索引基于CHAR/VARCHAR/NVARCHAR/XML/VARBINARY
提供了50個(gè)篩選器
全文索引使用語(yǔ)言特有的斷字符word breaker 和詞干分析器stemmer
指定具體語(yǔ)言,單詞之間的breaker
被排除在常用單詞(字)外面的單詞(字)稱為干擾詞stop word,通過(guò)指定干擾詞避免大量根本算不上關(guān)鍵字的單詞(字)所干擾
一個(gè)表/索引視圖只能有一個(gè)全文索引
stemmer
n. 抽梗機(jī),除梗器;抽梗工人
一定要使用單獨(dú)的文件組來(lái)存放全文目錄!
f
f
f
f
f
全文索引填充不是即時(shí)完成的,因?yàn)閿?shù)據(jù)必須提交給索引引擎,再由索引引擎應(yīng)用斷字符,詞干分析器,語(yǔ)言文件,干擾詞列表stop lists,最后才將更改合并到索引 merge到索引
語(yǔ)言規(guī)范決定了由全文索引引擎需要加載的斷字符和詞干分析器
SQL2008有第三方斷字符和詞干分析器
斷字符還能識(shí)別數(shù)據(jù)中的單詞之間的距離,這種接近性(proximity)添加到全文數(shù)據(jù)中,mysql的全文也有近似性,這是全文索引的獨(dú)有功能,like%%是做不到的
sqlserver使用詞干分析器來(lái)識(shí)別關(guān)鍵詞的各種形式變化
f
f
f
f
f
f
f
f
全文謂詞(全文搜索關(guān)鍵詞)提交給全文索引引擎,全文索引引擎利用斷字符word breaker標(biāo)記搜索關(guān)鍵詞,加token,將數(shù)據(jù)返回給優(yōu)化器
where后面的謂詞,如果不是全文,就叫謂詞,如果是全文就是全文謂詞
language參數(shù)指定是,是哪一個(gè)國(guó)家語(yǔ)言
優(yōu)化器不能通過(guò)參數(shù)嗅探來(lái)計(jì)算全文索引上的分別統(tǒng)計(jì)數(shù)據(jù),為了獲得最佳性能必須給全文搜索的所有關(guān)鍵字都是Unicode類型
同義詞文件
f
f
f
f
f
f
f
f
f
f
創(chuàng)建同義詞XML文件
添加干擾詞列表
重建全文索引
干擾詞列表stop list或noise word file
如果你在一個(gè)全文謂詞中提交的參數(shù)是干擾詞,查詢不會(huì)返回任何結(jié)果(而且他根本不需要訪問(wèn)底層數(shù)據(jù))
sql2005和更早版本在FTDATA文件夾下配置干擾詞文件,sql2008的干擾詞列表存放在sqlserver的一個(gè)數(shù)據(jù)庫(kù)中
增量填充全文索引必須要有一個(gè)時(shí)間戳
同義詞和干擾詞存放路徑
C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\FTData
C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\FTData文件夾下只有兩種文件:同義詞和干擾詞存
干擾詞列表stop list或noise word file或stop word
全文關(guān)鍵術(shù)語(yǔ)
f
f
f
f
總結(jié)
以上是生活随笔為你收集整理的关于SQLSERVER的全文目录跟全文索引的区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: C语言中低位存放,C语言 大端小端存储解
- 下一篇: 参数控制c语言代码走向,C语言可变参数完