標籤:des Lucene style blog http io color os ar
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
4.全文索引和like語句比較
當然是全文索引的執行效率高.
一般全文索引使用的是倒排索引,能夠支援多關鍵字的索引,而LIKE只有首碼匹配時才能使用索引,否則就是全表掃描,效率當然很低
但全文索引存在填充問題,需要在增加內容後進行增量填充,否則檢索不到新增的內容的。Sql Server 2008裡可採用基於變更追蹤的填充, 速度飛快, 幾乎可以認為就是即時增量填充了.
作者::老哇的爪子Attilax艾龍,EMAIL:[email protected]
轉載請註明來源: http://blog.csdn.net/attilax
5.倒排索引 inverted index
為什麼Sql server全文檢索索引和Lucune全文檢索索引速度快呢, 因為它和大多數搜尋引擎一樣, 都使用了倒排索引 inverted index
2.SQL Server 2008全文檢索索引
為了提高效率, 換用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*‘), 這樣是不行的.
3.Lucene全文檢索索引
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這最後一個開源版本了.
索引的更新填充問題: 也是要隔一段時間更新一次索引, 也是不可即時更新的, 需要定期更新填充才可以, 如果需要頻繁更新推薦刪除舊的然後重建索引.
一般情況,使用SQL Server中的全文索引,經過大體4個步驟:
1). 安裝full text search全文索引服務;
2). 為資料表建立full text catalog全文索引目錄;
3). 進行full text catalog的population操作(使全文索引與資料表內容同步);
4). 使用全文索引進行查詢。
Mssql2008的全文索引操作(attilax驗證)
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"‘);
速度還湊火..
查看全文index使用大小
增添狀態:::正在處理通知 ..表明目前等候插入....平常狀態..
目錄大小:::5g
查看錶行數與體積大小
表格屬性>>儲存...>>>35G
參考
Lucene.Net, SQL Server 2008全文檢索索引, Like模糊查詢的一點心得 - BobLiu - 部落格園.html
使用SQL Server中的全文索引_知識庫_部落格園.html
Atitit.軟體按鈕與儀錶盤(13)--全文索引操作--db資料庫子系統mssql2008