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