sql2005 中文分词


环境:Windows2003SQL2000(SP3)


现象:全文索引使用CONTAINS检索时部分内容检索不到,但使用like检索正常





示例:


字段值:它将伞骨增加一批,制成风扇形伞


检索词:风扇--无结果


检索词:成风--有结果





结论:SQL在做索引时把"成风"分成了词,但这样明显错误,想关闭SQL的中文分词功能,不知道哪位DX有过这方面的经验





另外请注意,尝试在SQL表中手动一个字一个字地输入上面字段值的那一句话,经过填充,可以检索到"风扇",这一点很奇怪





--------------------------------------------------





在Windows2000SQL2000(SP3)的机器上未出现所述现象,此环境应该是完全按字索引,可以正常查询到"风扇"的检索结果





-----------------------------------------------





已经试过W2K3SQL2KSP3/W2K3SQL2005SP2,也出现的同样的问题,





初步确定是W2K3的问题





看到以前也有过这样一个贴子,只是没有看到最终解决方案,链接拿来供大家参考


http://topic.csdn.net/t/20050927/16/4297538.html



答:这个和操作系统应该无关





只是采用的你的分词方式有关,如果采用默认的分词(也就是单字分词),当然会查的出来(由于索引变大,会降低查询效率)。


如果采用中文分词那么和单字词当然完全不同。





至于分词效果不好,那只好找微软了,它的中文非常差劲。简单的凑合用而已


如果要效果好的全文检索,最好自己做个倒排索引(当然最好有个相对完整的中文词库更好)
答:关键问题就是如何不采用中文分词
答:沒遇到過這樣的問題
答:希望有经验的高手快快出现
答:沒遇到過這樣的問題,學習
答:再顶,学习。
答:来的人留个脚印,帮顶一下。多谢了。
答:顶一下
答:顶下
答:一大早自己顶一下
答:顶
答:多谢帮顶,期待解决。
答:如果不采用中文分词,那么也简单,在全文索引步骤中有对字段选择设置,不采用中文,用原来的默认就可以


----------------------------





关键问题就是如何不采用中文分词
答:declare@wvarchar(8000)


set@w='常用的分词算法有正向最大匹配、逆向最大匹配、双向最大匹配、最佳匹配法、最少分词法、词网格算法等等。


最大匹配法(ForwardMaximumMatchingmethod,FMM法):选取包含6-8个汉字的符号串作为最大符号串,把最大符号串与词典中的单词条目相匹配,如果不能匹配,就削掉一个汉字继续匹配,直到在词典中找到相应的单词为止。匹配的方向是从右向左。


逆向最大匹配法(BackwardMaximumMatchingmethod,BMM法):匹配方向与MM法相反,是从左向右。实验表明:对于汉语来说,逆向最大匹配法比最大匹配法更有效。


双向匹配法(Bi-directionMatchingmethod,BM法):比较MM法与RMM法的切分结果,从而决定正确的切分。


最佳匹配法(OptimumMatchingmethod,OM法):将词典中的单词按它们在文本中的出现频度的大小排列,高频度的单词排在前,频度低的单词排在后,从而提高匹配的速度。'





declare@tbtable(wvarchar(10),fint)


declare@iint


declare@lint


declare@theWordvarchar(10)


set@l=2


while@l<5


begin


set@i=1


while@i<len(@w)


begin


set@theWord=substring(@w,@i,@l)


ifcharindex('',@theWord)=0begin


ifexists(selectwfrom@tbwherew=@theWord)


begin


update@tbsetf=f1wherew=@theWord


end


else


begin


insert@tb(w,f)select@theWord,1


endend


set@i=@i1


end


set@l=@l1


end





select*from@tbwheref>len(@w)/70orderbyfdesc
<BR

posted on 2009-09-02 15:25  老枪  阅读(500)  评论(0编辑  收藏  举报

导航