微軟sql server 2005全文檢索的BUG

      微軟sql server 2005的全文檢索功能有問題,對於一些特殊的漢字,會產生填充不完全或者錯誤填充的情況,但微軟不說這是一個BUG,只說這是微軟底層開發的分詞填充技術上的一些不足所引起的.

    這個BUG導致的性狀是 select * from tabname where  contains (*,'孫海斌')這類由一個"文"及一個"武" 等單獨的漢字組成的合體漢字,出現填充不到位的情況..執行以上語句會出現查詢不到這個人的情況...諮詢了微軟的技術支持他們說在2005中不會解決這個問題.但他們提供了一套替代的方案,就是用2000中的全文填充功能替換2005中的功能.這樣可以取得比較好的效果,於是.我按照微軟提供的替換功能操作,等全文填充完畢後,使用這條語句查詢"孫海斌"這個人,只查出了一條記錄,但我使用select * from tabname where username like '%孫海斌%'卻出現了200多個這條記錄.暈..莫非是微軟的這個替換方案有問題...於是繼續諮詢微軟..他們說...你的username字段是varchar字段,如果要使全文填充正常的話,必須得改成nvarchar...暈....這下我徹底暈了..沒辦法啊....一個字段的類型修改,那可不是要了命了...涉及到多少代碼的修改啊.而且業務多年的積累有很多功能,沒準保證哪天不出問題..暈....

下面我就提供一下微軟的解決方案吧.各位,可以一試.但.最終出不出問題..我不敢保證,只這畢竟是微軟提供的一個解決方案了..

 

尊敬的X先生:
您好。由於最近您那邊要處理另外一個緊急的問題,而且目前環境來說,您不會在生產環境中直接做以下測試,所以在此我就免費取消該問題。以下是我對該問題做的一個小結,供您參考。
 
問題描述:
============
SQL 2005中,使用全文索引的時候無法正確搜索出相關記錄。
 
情況分析:
============
經過研究,發現SQL 2005對於中文進行全文索引的時候,由於中文字符拆字文件ChsBrkr.dll對於某些中文字符拆字不合理,導致SQL 2005使用全文索引的時候無法正確查找相關記錄。
而且此問題以前也有客戶遇到,並且我們已經提交給開發部門進行研究。調查下來的原因主要是因爲SQL 2005全文索引所依靠的中文字符拆字對於某些中文字符處理不合理,導致SQL 2005全文索引無法正確查找相關記錄。而此中文字符拆字會在未來的SQL版本中一點一點改進,使之儘量能夠合理進行中文字符的拆字。但是這個字符拆字是每個版本所默認設計的,無法更改。也就是說,在每個SQL版本中的字符拆字是by design的,不是BUG
而經過確認,您那邊以前可以在WINDOWS 2003+SQL 2000的環境中正確查找相關記錄,那麼我們可以在您的測試環境中測試一下以下步驟,來將SQL 2005中的關於全文索引的文件替換成SQL 2000版本中的文件,然後再來測試一下問題。
 
處理方法:
============
1. 下載和您SQL 2005語言版本一樣的SQL 2000 SP4補丁包,並且雙擊解壓縮之後,在文件夾\SQL2KSP4\x86\fulltext\mssearch\search中找到以下三個文件
·         chsbrkr.dll
·         noise.chs
·         tschs.xml
此時請將這三個文件copy一份
 
2. 停止SQL 2005服務,找到安裝目錄c:\Program Files\Microsoft SQL Server\MSSQL.1
·         更改文件\MSSQL\Binn\ChsBrkr.dll\MSSQL\Binn\old_ChsBrkr.dll
·         更改文件\MSSQL\FTData\noiseCHS.txt\MSSQL\FTData\old_noiseCHS.txt
·         更改文件\MSSQL\FTData\tsCHS.xml\MSSQL\FTData\old_tsCHS.xml
 
3. 將第一步中copy的三個文件,放到相對應的目錄中
 
4. 打開註冊表
·         找到鍵值:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL.1\MSSearch\CLSID
·         右鍵點擊CLSID並且選擇new->Key
·         輸入{9717fc70-c1bc-11d0-9692-00a0c908146e}後並按回車
·         在右邊窗格中,雙擊Default鍵值,輸入chsbrkr.dll後點擊確定
·         找到鍵值HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL.1\MSSearch\Language\chs
·         在右邊窗格中,雙擊以下三個鍵值,並做更改
o  NoiseFile,更改爲C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\FTData\noise.chs
o  TsaurusFile,更改爲C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\FTData\tschs.xml
o  WBreakerClass,更改爲{9717fc70-c1bc-11d0-9692-00a0c908146e}
 
5. 重啓SQL Server服務,使用SQL Server Management Studio連接SQL之後,運行以下語句:
sp_fulltext_service 'verify_signature', 0
 
6. 刪除並重建全文索引目錄,然後再次測試問題
 
問題狀態:
=========
已經取消。
 
 
希望您對我的這次服務非常滿意,並感謝您過去的一年中對我們工作的大力支持。
 
敬祝商祺!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章