在Sql Server中使用全文检索

在Sql Server数据库中可以使用全文索引,与仅适用于字符模式的 LIKE 谓词不同,全文查询将根据特定语言的规则对词和短语进行操作,从而针对此数据执行语言搜索。

对大量非结构化的文本数据进行查询时,使用全文搜索获得的性能优势会得到充分的表现。对数百万行文本数据执行的 LIKE 查询可能需要花费几分钟时间才能返回结果;但对同样的数据,全文查询只需要几秒或更少的时间,具体取决于返回的行数。

可以对包含 char、varchar 和 nvarchar 数据的列创建全文索引。也可以对包含格式化二进制数据(如存储在 varbinary(max) 或 image 列中的 Microsoft Word 文档)的列创建全文索引。不能使用 LIKE 谓词来查询格式化的二进制数据。若要对一个表创建全文索引,该表必须具有一个唯一且非空的列。

下面是创建全文检索的步骤

1、首先创建一个全文目录,一个全文目录可以包含多个全文索引,但一个全文索引只能用于构成一个全文目录。每个数据库可以不包含全文目录或包含多个全文目录。as default参数表明把此全文目录作为默认的全文目录。

Create  fulltext catalog DocumentCatalog  as   default

2、然后创建唯一非聚集索引。

create   unique   index  T_DocumentsContent_VerID  on  T_DocumentsContent(VerID)

这个一般把你要全文索引的表上的主键作为唯一非聚集索引。该索引将强制插入列中的数据具有唯一性。一般都是主键符合这个要求。

3、最后一步就是创建全文索引

Create  FULLTEXT  INDEX   ON  T_DocumentsContent(DOCUCONTENT TYPE  COLUMN  ExtendedName)
key   index  T_DocumentsContent_VerID  on  DocumentCatalog
with  change_tracking auto
  • T_DocumentsContent:用于全文索引的表明
  • DocuContent:用于全文检索的字段
  • 如果用于全文检索的字段是二进制流文件,那么要通过指定这个二进制流文件的扩展名由哪个列提供数据。如上例的Type Column ExtendedName,表明DocuContent的类型由ExtendedName列提供
  • key index用来指定全文索引表唯一键索引的名称
  • on DocumentCatalog:表明这个全文索引是建立在哪个全文目录上
  • with Change_Tracking:指定 SQL Server 是否维护一份对索引数据的全部更改的列表。更改跟踪不会记录通过 WRITETEXT 和 UPDATETEXT 进行的数据更改。他有几个选项
    1. MANUAL: 指定是使用 SQL Server 代理按计划传播更改跟踪日志,还是由用户手动进行传播。 2.AUTO:指定在关联的表中修改了数据时,SQL Server 自动更新全文索引。默认值为 AUTO。 3.OFF [ ,NO POPULATION] 指定 SQL Server 不保留对索引数据的更改的列表。仅当ANGE_TRACKING 为 OFF 时,才能使用 NO POPULATION 选项。如果指定了 NO POPULATION,则 SQL Server 在创建索引后不会对其进行填充。只有在用户使用 START FULL 或 INCREMENTAL POPULATION 子句执行 ALTER FULLTEXT INDEX 命令后,才会填充索引。如果未指定 NO POPULATION,则 SQL Server 创建索引后将对其进行完全填充

当然如果需要使用全文索引需要把全文索引服务启动,就是SQL Server FullText Search这个服务。注意Sql Express版本不能使用全文索引。

最后剩下如何进行全文检索的查询了。在查询种我们不能使用like关键字来进行全文检索,应该使用Contains谓词,他的第一个参数是你要全文检索的列名,可以指定多个列,用都好分割,并且必须用小括号括起来,第二个参数是需要搜索的文本,第二个参数前后必须用单引号包含起来,里面查询的文本可用引号包含,并且可以使用通配符和条件语句,如

where   Contains (a.Content,  ' "中国*" or "武汉" ' )

条件语句可以用符号来代理如AND可以用&来代替,具体参看SQLServer的帮助文档。

第三个参数是查询的语言。如果一个列里面存储了多种语言,允许用户指定搜索的语言。

除了Contains谓词可以用于全文检索FreeText也可以进行全文检索,但次谓词用于搜索含有基于字符的数据类型的列,好像不能搜索二进制流的列,但帮助文档却又说支持Image的列。但是FreeText的搜索精度没有Contains的谓词高,推荐使用Contains谓词。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值