笔记323 Sqlserver2005中做全文检索
笔记323 Sqlserver2005中做全文检索
1 • Sqlserver2005中做全文检索 2 • http://www.cnblogs.com/digjim/archive/2006/09/27/516608.html 3 4 从吉日嘎啦大师的文章有感而发 5 http://www.cnblogs.com/jirigala/archive/2012/04/16/2452930.html 6 7 • 1、查看当前数据库的状态 8 SELECT DATABASEPROPERTY ('pubs','IsFulltextEnabled') 9 2、打开FullText功能 10 sp_fulltext_databse 'enable' 11 关闭此功能 12 sp_fulltext_databse 'disable' 13 3、建立一个Unique的Index。 14 在Modify Table界面中,鼠标右键,选择Index/Keys... 15 16 17 在Columns中选择字段,Type选择Unique Key。 18 19 20 21 4、接下来就可以定义全文检索了,如下图选择Define Full-Text Index-》Define Full-Text Index... 22 23 24 接下来就是向导界面了,按照向导一步一步做,就不会错了! 25 26 27 选择刚才定义的Unique Index。 28 29 30 选择你要用来全文检索的字段。 31 32 33 (选择“自动”就可以了,当索引列里的内容发送变化,例如更新或者删除或者增加, sqlserver自动更新索引。“创建索引时启动完全填充”:表示创建完索引之后立刻填充索引内容进去叶子节点 ,参考文章:http://www.cnblogs.com/lzrabbit/archive/2012/05/21/2499389.html#2381890) 34 35 ) 36 37 38 选择全文目录 39 40 41 创建调度 42 接下来会提示对表进行填充调度,为能够准实时地把基表的全文索引列的修改(增、删、改)准实时地应用到全文索引,建议不要在这里添加任何调度,直接点击“下一步”,实际上应用更改跟踪就可以了就是上一步的设置。 43 44 45 全文检索完成,点击Finish进行建立。 46 47 48 开始建立。 49 50 51 52 5、启动完全填充 53 54 55 56 57 58 因为CT_inhousecard有7行记录,所以项计数为7 59 60 61 62 全文索引可对varchar、text、image类型字段进行检索,是解决海量数据模糊查询的好办法。一个表只能建立一个全文索引(但可以对多个字段)。 63 64 在展开数据库节点后,右击“全文目录”,选择“新建军全文目录”,填入全文目录的名称,可以修改路径,通过将全文目录放在单独的磁盘或磁盘阵列可以提高效率,建议不要对整个全文目录进行任何形式的填充调度 65 66 这些列可为 char、varchar、nchar、nvarchar、text、ntext、image、xml、varbinary 或 varbinary(max) 类型 67 68 与like的比较 MSDN解释 69 与全文搜索不同,LIKE Transact-SQL 谓词仅对字符模式( char、varchar、nchar、nvarchar)有效。另外,不能使用 LIKE 谓词来查询格式化的二进制数据。此外,对大量非结构化的文本数据执行 LIKE 查询要比对相同数据执行同样的全文查询慢得多。对数百万行文本数据进行的 LIKE 查询可能需要几分钟的时间才能返回结果;而对于同样的数据,全文查询只需要几秒甚至更少的时间,具体取决于返回的行数及其大小。另一个考虑因素是 LIKE 仅对整个表执行简单模式扫描。相反,全文查询可识别语言,它在索引和查询时应用特定的转换,例如,筛选非索引字并进行同义词库和变形扩展。这些转换可帮助全文查询改进其撤回以及结果的最终排名 70 71 72 73 74 SQL Server 2000提供的全文检索语句主要有CONTAINS和FREETEXT。 75 (1)CONTAINS语句的功能是在表的所有列或指定列中搜索:一个字或短语;一个字或短语的前缀;与一个字相近的另一个字;一个字的派生字;一个重复出现的字。 76 77 78 (2)FREETEXT语句的功能是在一个表的所有列或指定列中搜索一个自由文本格式的字符串,并返回与该字符串匹配的数据行。所以,FREETEXT语句所执行的功能又称做自由式全文查询。 79 80 81 82 83 84 这篇记录参考了一下文章 85 参考文章: 86 http://msdn.microsoft.com/zh-cn/library/ms187787 87 http://wenku.baidu.com/view/429dc70eba1aa8114431d94e.html 88 http://zhidao.baidu.com/question/124076404.html 89 ------------------------------------------------------------------------------- 90 sql脚本 91 USE pratice 92 93 SELECT DATABASEPROPERTY ('pubs' , 'IsFulltextEnabled') 94 95 96 EXEC [sys]. [sp_fulltext_database] @action = 'enable' -- varchar(20) 97 98 CREATE TABLE fulltext_test ( 99 id VARCHAR( 200 ) NOT NULL, 100 NAME VARCHAR ( 200) NOT NULL 101 ) 102 103 CREATE UNIQUE INDEX IX_ID ON [dbo]. [fulltext_test] (ID ASC ) 104 105 --DROP TABLE [dbo].[fulltext_test] 106 107 INSERT INTO [dbo] .[fulltext_test] ( [id], [NAME] ) 108 SELECT '1' , '你好 ' UNION ALL 109 SELECT '2' , '你好 ' UNION ALL 110 SELECT '3' , '你好 ' UNION ALL 111 SELECT '4' , '你好 ' UNION ALL 112 SELECT '5' , '你好 ' UNION ALL 113 SELECT '6' , '你好 ' UNION ALL 114 SELECT '7' , '你好 ' 115 116 SELECT * FROM [dbo] . [fulltext_test] WHERE CONTAINS( [id] ,'7' )