关闭Windows2003的中文分词功能--影响到了SQL的全文检索准确性
问题描述: 
 环境:Windows2003+SQL2000(SP3) 
 现象:全文索引使用CONTAINS检索时部分内容检索不到,但使用like检索正常   
 示例: 
 字段值:它将伞骨增加一批,制成风扇形伞 
 检索词:风扇--无结果 
 检索词:成风--有结果   
 结论:SQL在做索引时把 "成风 "分成了词,但这样明显错误,想关闭SQL的中文分词功能,不知道哪位DX有过这方面的经验   
 另外请注意,尝试在SQL表中手动一个字一个字地输入上面字段值的那一句话,经过填充,可以检索到    "风扇 ",这一点很奇怪   
 --------------------------------------------------   
 在Windows2000+SQL2000(SP3)的机器上未出现所述现象,此环境应该是完全按字索引,可以正常查询到 "风扇 "的检索结果   
 -----------------------------------------------   
 已经试过W2K3+SQL2K+SP3/W2K3+SQL2005+SP2,也出现的同样的问题,   
 初步确定是W2K3的问题   
 看到以前也有过这样一个贴子,只是没有看到最终解决方案,链接拿来供大家参考 
 http://topic.csdn.net/t/20050927/16/4297538.html 
------解决方案--------------------这个和操作系统应该无关   
 只是采用的你的分词方式有关,如果采用默认的分词(也就是单字分词),当然会查的出来(由于索引变大,会降低查询效率)。 
 如果采用中文分词那么和单字词当然完全不同。   
 至于分词效果不好,那只好找微软了,它的中文非常差劲。简单的凑合用而已 
 如果要效果好的全文检索,最好自己做个倒排索引(当然最好有个相对完整的中文词库更好)
------解决方案--------------------沒遇到過這樣的問題
------解决方案--------------------沒遇到過這樣的問題,學習
------解决方案--------------------顶下
------解决方案--------------------顶
------解决方案--------------------如果不采用中文分词,那么也简单,在全文索引步骤中有对字段选择设置,不采用中文,用原来的默认就可以 
 ----------------------------   
 关键问题就是如何不采用中文分词
------解决方案--------------------declare @w varchar(8000) 
 set @w= '常用的分词算法有正向最大匹配、逆向最大匹配、双向最大匹配、最佳匹配法、最少分词法、词网格算法等等。  
 最大匹配法(Forward Maximum Matching method, FMM法):选取包含6-8个汉字的符号串作为最大符号串,把最大符号串与词典中的单词条目相匹配,如果不能匹配,就削掉一个汉字继续匹配,直到在词典中找到相应的单词为止。匹配的方向是从右向左。  
 逆向最大匹配法(Backward Maximum Matching method, BMM法):匹配方向与MM法相反,是从左向右。实验表明:对于汉语来说,逆向最大匹配法比最大匹配法更有效。  
 双向匹配法(Bi-direction Matching method, BM法):比较MM法与RMM法的切分结果,从而决定正确的切分。  
 最佳匹配法(Optimum Matching method, OM法):将词典中的单词按它们在文本中的出现频度的大小排列,高频度的单词排在前,频度低的单词排在后,从而提高匹配的速度。 '   
 declare @tb table(w varchar(10),f int) 
 declare @i int 
 declare @l int 
 declare @theWord varchar(10) 
 set @l=2 
 while @l <5 
 begin 
 	set @i=1 
 	while @i <len(@w)	 
 		begin 
 		set @theWord=substring(@w,@i,@l) 
 		if  charindex( '  ',@theWord)=0 begin 
 		if   exists(select w from @tb where w=@theWord) 
 			begin 
 				update @tb set f=f+1 where w=@theWord 
 			end 
 		else 
 			begin 
 				insert @tb(w,f) select @theWord,1 
 			end end 
 		set @i=@i+1 
 		end	 
 	set @l=@l+1 
 end    
 select * from @tb where f> len(@w)/70  order by f desc