向SQL Server全文索引進軍,艱難歷程 寫這篇文章本來不在計劃之內,以前也沒有接觸過全文索引。偶然的一次備課中。突然有了靈感。決定將自己創建及其使用全文索引的過程記錄下來,以備后續使用。 至于全文索引的概念,網上一大堆,這里就不再贅述。直接切入正
向SQL Server全文索引進軍,艱難歷程
寫這篇文章本來不在計劃之內,以前也沒有接觸過全文索引。偶然的一次備課中。突然有了靈感。決定將自己創建及其使用全文索引的過程記錄下來,以備后續使用。
至于全文索引的概念,網上一大堆,這里就不再贅述。直接切入正題。
創建全文索引步驟:
1:對著數據庫點擊右鍵-選擇屬性-選擇文件,選中“使用全文索引”
該選項只要勾選就可以了,默認都是勾選的。
2:對著表點擊右鍵-全文索引-定義全文索引
3:點擊下一步,如果這個表中沒有唯一性索引就會出現下圖所示
4:選擇表列,選擇斷字符語言。
5:點擊下一步,這里的選項要注意,如果不想再表、視圖更改的時候更新全文索引,那就選擇不跟蹤更改;這樣就可以選擇是否在創建索引時啟動完全填充了。
6:點擊下一步創建索引要保存的目錄,香港服務器,全文索引的索引文件是以文件的形式保存到硬盤上的。
7:之后就可以設置自動填充、手動跟蹤更改,還有設置計劃了。
上述步驟雖然簡單,但是我在創建時,碰到了N多問題
問題描述:
01.首先我對表點擊右鍵的時候,全文索引菜單項是灰色,不可用狀態
如下圖
通過查詢資料發現需要執行如下命令開啟該菜單項目
EXEC sp_fulltext_database 'ensable'
這樣全文索引就變成可用狀態了。
如果想讓全文索引重新變暗(當然一般人不會這么做),可以執行如下代碼
EXEC sp_fulltext_database 'disable'
02.在使用全文索引進行檢索時,必須要開啟全文檢索服務
默認該服務是關閉的。
03.當我創建好全文索引后,通過如下語句進行索引關鍵字時
Select content from info infoinfo
where contains(content, '但為了獲得最佳性能,建議使用主鍵約束或唯一約束。')
出現了如下提示:
"SQL Server 在與全文篩選器后臺程序宿主(FDHost)進程通信時遇到錯誤 0x80070218。請確保 FDHost 進程正在運行。若要重新啟動 FDHost 進程,請運行 sp_fulltext_service 'restart_all_fdhosts' 命令或重新啟動 SQL Server 實例。 "
經過反復摸索, 發現需要在 SQL配置工具里面, 更改全文服務的運行賬戶, 有默認的 "系統內設"-->"本地賬戶", 搞定!
但是更改完該設置后,我依然沒能笑出聲來,原因是接下來雖然沒有錯誤發生,但是卻檢索不出我需要的結果,但通過like進行檢索,的確有數據。
select content from infoinfo
where content like '%但為了獲得最佳性能,建議使用主鍵約束或唯一約束。%'
這時候,我差點崩潰了。沒辦法,繼續搜索資料。
最后,從微軟官網上搜索到這樣一篇文章
里面詳細講述了產生該問題的原因,以及對應的解決方案
請注意
重要提示: 本文包含有關修改注冊表的信息。 在修改注冊表之前,請務必對其進行備份,并確保您了解如何還原注冊表發生問題。有關如何備份、 還原,和編輯注冊表單擊下面的文章編號,以查看 Microsoft 知識庫中相應的文章:
256986Microsoft Windows 注冊表的說明
癥狀
具有 300 KB 以上的文本 (超過 150 KB ntext列的 UNICODE 文本) 的文本的全文啟用的列上運行全文索引包含查詢時,美國空間,您可能會收到一條消息,"0 行受影響",即使存在有效的結果。
原因
Microsoft 搜索服務 (MSSearch.exe) 維護 SQL Server 7.0 全文搜索來搜索的基于字符的數據類型,如字符、 varchar、文本和ntext的全文目錄。文本可以有多個 300 KB 的數據根據您定義的列 (ntext可以有多個 150 KB 的 UNICODE 文本)。全文索引填充時,MSSearch 服務從文本列中檢索所有非重復的單詞,并將它們存儲在虛擬內存中,它將它們合并到主索引之前。MSSearch 屬性可防止 MSSearch 服務占用的虛擬內存。MSSearch 屬性由下面的注冊表和它的值控制:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Search\1.0\Indexer\SQLServer\
例如: Full_Text_Catalog_Name = SQL0000500005
此注冊表項的默認值設置為 307200 (300 KB)。因此,MSSearch 服務假定 300 KB 的文本作為重要和填充全文索引時將忽略文本列的其余的數據。
因此,當您運行全文的 CONTAINS 子句查詢來搜索后 300 KB 的文本將出現在文本欄中的單詞,不可能獲得有效的結果。
替代方法
警告: 如果注冊表編輯器使用不當,可能會導致嚴重的問題,可能需要您重新安裝操作系統。注冊表編輯器使用不當所產生的問題,Microsoft 不能保證您可以解決。使用注冊表編輯器需要您自擔風險。
若要變通解決此問題:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Search\1.0\Indexer\SQLServer\Full_Text_Catalog_Name\
(例如: Full_Text_Catalog_Name = SQL0000500005)。
但是真正按照這個文檔進行操作時,再次碰到了問題,就是第3步到1.0后,沒有Indexer文件夾,我暈,只能再次硬著頭皮查資料。結果,網上資料很少,卻搜到一篇一模一樣的英文文章,是這樣寫的
PRB: A Full-Text Search Query on TEXT or NTEXT Column Does Not Return Valid ResultsArticle ID: 241113 - View products that this article applies to.
This article was previously published under Q241113
Notice聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com