Atitit.軟件按鈕與儀表盤(13)--全文索引操作--db數(shù)據(jù)庫(kù)子系統(tǒng)mssql2008 全文索引操作 4.全文索引和like語(yǔ)句比較 1 5.倒排索引 inverted index 1 2.SQL Server 2008全文檢索 2 3.Lucene全文檢索 3 一般情況,使用SQL Server中的全文索引,經(jīng)過(guò)大體4個(gè)步驟: 4
Atitit.軟件按鈕與儀表盤(13)--全文索引操作--db數(shù)據(jù)庫(kù)子系統(tǒng)mssql2008
全文索引操作
4.全文索引和like語(yǔ)句比較 1
5.倒排索引 inverted index 1
2.SQL Server 2008全文檢索 2
3.Lucene全文檢索 3
一般情況,使用SQL Server中的全文索引,經(jīng)過(guò)大體4個(gè)步驟: 4
Mssql2008的全文索引操作(attilax驗(yàn)證) 5
查看全文index使用大小 5
查看表行數(shù)與體積大小 6
參考 6
當(dāng)然是全文索引的執(zhí)行效率高.
一般全文索引使用的是倒排索引,能夠支持多關(guān)鍵字的索引,而LIKE只有前綴匹配時(shí)才能使用索引,否則就是全表掃描,效率當(dāng)然很低
但全文索引存在填充問(wèn)題,需要在增加內(nèi)容后進(jìn)行增量填充,否則檢索不到新增的內(nèi)容的。Sql Server 2008里可采用基于更改跟蹤的填充, 速度飛快, 幾乎可以認(rèn)為就是實(shí)時(shí)增量填充了.
作者::老哇的爪子Attilax艾龍,EMAIL:1466519819@qq.com
轉(zhuǎn)載請(qǐng)注明來(lái)源: http://blog.csdn.net/attilax
為什么Sql server全文檢索和Lucune全文檢索速度快呢, 因?yàn)樗痛蠖鄶?shù)搜索引擎一樣, 都使用了倒排索引 inverted index
為了提高效率, 換用sql server的全文檢索, 怎么建全文檢索就此略去, 不提, 只看查詢方法.
例如: select * from table where contains(ProductDesc, '*cad*')
它查詢的效率很高, 支持中文分詞(但好不好就另說(shuō)了), 但缺點(diǎn)竟然是在英文查詢上, 如果想模糊查詢帶cad三個(gè)字母的數(shù)據(jù), 它只能搜索出以cad為完整單詞的數(shù)據(jù), 例如: 它能查出abc cad , cad def, 或者cad, 它不能查出autocad這種字母連在一起的數(shù)據(jù), 也就是說(shuō), sql server的全文檢索的英文分詞是空格, 要想查連在一起的英文詞, 它辦不到, 得另尋第三方的全文索引了, ms如果在這里開(kāi)個(gè)可擴(kuò)展的口子多好, 可惜了.
索引的更新填充問(wèn)題: 創(chuàng)建好全文檢索就自動(dòng)來(lái)一次完全填充, 如果在跟蹤更改處選擇自動(dòng), 全文檢索就會(huì)采用基于更改跟蹤的填充, 原表數(shù)據(jù)一旦有改動(dòng), 就會(huì)從后臺(tái)悄悄地傳播過(guò)來(lái), 自動(dòng)的更新全文索引. 具體可參考http://msdn.microsoft.com/zh-cn/library/ms142575.aspx
在更新全文索引之前這段時(shí)間, 搜不到新錄入但未收入全文索引的數(shù)據(jù), 但like可查到. 雖然不是實(shí)時(shí)的, 但是經(jīng)過(guò)測(cè)試, 我發(fā)現(xiàn)這個(gè)更新速度非常之快, 幾乎一改原表, 全文索引就更新了, 所以我覺(jué)得可以認(rèn)為實(shí)時(shí)的, 估計(jì)sqlserver內(nèi)部應(yīng)該是用觀察者模式實(shí)現(xiàn)這個(gè)功能的.
另外, contains包含的列都必須來(lái)自同一個(gè)表, 不能跨表, 例如where contains(a.ProductDesc, b.ProductName, '*cad*'), 這樣是不行的.
SQL server全文檢索不靈了, 只能找第三方的方案了, 首當(dāng)其沖的就是Lucene了, 但在.net下, Lucene卻很不順當(dāng).
NLucene是將 Lucene 從 Java 移植到 .NET 的一個(gè) SourceForge 項(xiàng)目,它從 Lucene 1.2 版本轉(zhuǎn)化而來(lái), 但2002年就停止更新了.
因?yàn)?NLucene 項(xiàng)目到2002年就沒(méi)有再推出新的版本,可Lucene 卻一直在發(fā)展,于是有人把Lucene 1.3版移植到.NET就成了Lucene .NET,但是Lucene .Net發(fā)展到2.0版的時(shí)候變成了商業(yè)化的產(chǎn)品,脫離了開(kāi)源項(xiàng)目, 聽(tīng)說(shuō)現(xiàn)在進(jìn)了孵化器已停止開(kāi)發(fā)了, 但上官網(wǎng)http://incubator.apache.org/lucene.net/download.html上看, 還仍然在更新中似乎沒(méi)有停止, 最新開(kāi)源的版本是2.9.2, 發(fā)布日期是2011年5月6日, 他們還在準(zhǔn)備2.9.4版.
受到Lucene.Net脫離開(kāi)源項(xiàng)目的影響,有人為了繼續(xù)發(fā)展開(kāi)源.Net搜索引擎,于是在Lucene.Net的原有基礎(chǔ)上繼續(xù)發(fā)展該項(xiàng)目,但是名字改成了DotLucene以區(qū)別于Lucene.Net。但現(xiàn)在打開(kāi)官網(wǎng)一看, 得, 又停止了. 看來(lái), 只能用Lucene.Net2.0這最后一個(gè)開(kāi)源版本了.
索引的更新填充問(wèn)題: 也是要隔一段時(shí)間更新一次索引, 也是不可實(shí)時(shí)更新的, 需要定期更新填充才可以, 如果需要頻繁更新推薦刪除舊的然后重建索引.
1). 安裝full text search全文索引服務(wù);
2). 為數(shù)據(jù)表建立full text catalog全文索引目錄;
3). 進(jìn)行full text catalog的population操作(使全文索引與數(shù)據(jù)表內(nèi)容同步);
4). 使用全文索引進(jìn)行查詢。
1.啟動(dòng)SQL Full-text Filter Daemon Launcher (MSSQLSERVER) 服務(wù)
2.建設(shè):::索引表格>>ritkey>>全文index>>創(chuàng)建fulltxt 或者
Db>存儲(chǔ)>>全文目錄>新建全文目錄
3..增添計(jì)劃>>cpu 空閑的.....
4. 4. 使用索引功能:
select * from mybbs_Table where Contains(col2,'"windows"');
速度還湊火..
增添狀態(tài):::正在處理通知 ..表明目前等候插入....平常狀態(tài)..
目錄大小:::5g
表格屬性>>存儲(chǔ)...>>>35G
Lucene.Net, SQL Server 2008全文檢索, Like模糊查詢的一點(diǎn)心得 - BobLiu - 博客園.html
使用SQL Server中的全文索引_知識(shí)庫(kù)_博客園.html
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com