内容显示页
 
类别:数据库+SQL | 浏览(788) | 2010-4-24 19:40:10

SQL Server CLR 极速入门,启用、设计、部署、运行提到过,SQL Server全文搜索有一个问题,就是记录不全,上周末经过分析发现,

  1. 字段类型是varchar 且 如果搜索的的词正好是文章的结尾,就搜索不到,解决方法是在他后边再加上一个.让他不是在文章最后就行
  2. 字段类型换成nvarchar后,问题解决
CREATE DATABASE test

USE test
DROP TABLE test
--建测试表
CREATE TABLE test
    (
      id INT IDENTITY(1, 1) PRIMARY KEY ,
      txtTitle1 VARCHAR(50) ,--这里用的是varchar
      txtTitle2 NVARCHAR(50) ,--这里用的是nvarchar
    )
    
--插入50条数据
DECLARE @i INT
SET @i = 0
WHILE @i < 50 
    BEGIN
        INSERT  INTO test
                ( txtTitle1, txtTitle2 )
        VALUES  ( '柳永法', '柳永法')
        SET @i = @i + 1
    END
--对test表建全文索引,列选择txtTitle1, txtTitle2。方法如下:
--右击要建全文索引的表-->全文索引-->定义全文索引-->点几下"下一步"直到“选择表列”
-->选中要建立全文索引的列-->下一步-->自动-->创建新目录(写上名称,选位置,其它自便)
-->点几下"下一步"直到完成,这时系统会开始建全文目录,建好没有可以在当前数据库所在:
--展开当前数据库-->存储-->全文目录-->右击,你刚才起的名,如果“重新生成”是灰色,
--说明系统当前正在生成,如果可以点,说明生成完了


--针对varchar的列txtTitle1 只要查询里是以 '法' 结尾,都查不出记录来
SELECT COUNT(id) FROM dbo.test WHERE CONTAINS(txtTitle1,'柳永法');	--0
SELECT COUNT(id) FROM dbo.test WHERE CONTAINS(txtTitle1,'柳');	--50
SELECT COUNT(id) FROM dbo.test WHERE CONTAINS(txtTitle1,'永');	--50
SELECT COUNT(id) FROM dbo.test WHERE CONTAINS(txtTitle1,'法');	--0
SELECT COUNT(id) FROM dbo.test WHERE CONTAINS(txtTitle1,'柳永');	--50
SELECT COUNT(id) FROM dbo.test WHERE CONTAINS(txtTitle1,'永法');	--0
SELECT	REPLICATE('-',20)
--针对nvarchar的列txtTitle2 都可以查出全部记录
SELECT COUNT(id) FROM dbo.test WHERE CONTAINS(txtTitle2,'柳永法');	--50
SELECT COUNT(id) FROM dbo.test WHERE CONTAINS(txtTitle2,'柳');	--50
SELECT COUNT(id) FROM dbo.test WHERE CONTAINS(txtTitle2,'永');	--50
SELECT COUNT(id) FROM dbo.test WHERE CONTAINS(txtTitle2,'法');	--50
SELECT COUNT(id) FROM dbo.test WHERE CONTAINS(txtTitle2,'柳永');	--50
SELECT COUNT(id) FROM dbo.test WHERE CONTAINS(txtTitle2,'永法');	--50

--在txttitle列末尾随便加一个字符
UPDATE test SET txttitle1=txttitle1+'.'
    
--重建索引后,再执行上面的查询,结果都 是50


--通过以上示例得出结论:只要在设计字段时把varchar改成nvarchar,就可以解决我们的问题,且nvarchar有个好处就是:如果数据库服务器部署在非中文的系统上时,不会出现乱码问题。

 


引用本页地址:http://www.yongfa365.com/item/SQL-Server-FullText-Search-varchar-nvarchar.html
 
 
相关链接
 
网友评论:
1 听风吹雨 - 2010-6-19 23:53:07
全文索引的硬伤
 
姓名: 记住我
网址:
邮箱:
内容:
验证码:  验证码图片 看不清? 换张图试试
 
     
 
 
文章分类
 
 
.Net + C#(73)
 
 
ASP+VBS(161)
 
 
 
Linux(10)
 
 
 
web 2.0(26)
 
 
 
 
 
心程(68)
 
生活(97)
 
 
     

Power by :柳永法(yongfa365)'Blog  | 京ICP备07011491号  QQ:64049027  E-mail:64049027@qq.com yongfa365'CodePlex yongfa365'CodeGoogle

申请友情链接 要求:跟本站主题相类似正规网站,双方交换为首页位置

转载请注明来源,以便后人及时得到最新、修正、加强版!!!