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