微软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. 删除并重建全文索引目录,然后再次测试问题
 
问题状态:
=========
已经取消。
 
 
希望您对我的这次服务非常满意,并感谢您过去的一年中对我们工作的大力支持。
 
敬祝商祺!

你可能感兴趣的:(SQL2008)