微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SQLserver2008全文检索使用方法

一、开启sql Full-text服务:


保证 sql Full-text Filter Daemon Launcher服务处于开启状态,不同版本sqlServer全文检索服务名称可能稍有不同,如果服务列表中没有这个服务,请使用sqlServer安装光盘安装“全文检索”组件。


二、 启用全文检索

执行sql语句启用全文检索:Execute sp_fulltext_database 'enable'


三、设置全文语言为中文


在服务器->属性->高级中,设置认全文语言为2052(中文)。


四、建立数据表

在需要全文检索的数据表中,必须有一列字符型的字段存放文件类型,例如建表语句中的FileType。必须有一列Varbinary(Max)类型的字段存放文件内容,例如建表语句中的FileContent。

建表sql语句示例:

CREATE TABLE SampleBlobTable
(
[PKID] int identity(1,1) primary key,[FileName] Nvarchar(255) null,[FileType] Nvarchar(32) null,[FileContent] VARBINARY(MAX) NULL,[AddTime] datetime default(getdate())
)



五、建立全文索引

步骤1 建立全文索引

在需要全文检索的数据表上点击右键->全文索引->定义全文索引。




步骤2 选择唯一索引


步骤3 选择表列


选择表列,本例中以FileType列标明文件格式,将文件存入数据库时须正确填写此字段,此字段中的数据内容包括“doc”、“txt”、“xls”等。

后续步骤无需更改认值,点击下一步继续直至完成。


六、支持PDF文件

1.      安装 Adobe iFilter

Adobe iFilter6.0:

http://www.adobe.com/support/downloads/thankyou.jsp?ftpID=2611&fileID=2457

Adobe iFilter9.0for 64bit:

http://www.adobe.com/support/downloads/thankyou.jsp?ftpID=4025&fileID=3941

2.      执行sql语句

execsp_fulltext_service 'load_os_resources',1;

exec sp_fulltext_service'verify_signature',0;

3.      重新启动sqlSERVER

4.      检查支持文件

执行下列语句:

select document_type,path from sys.fulltext_document_types wheredocument_type ='.pdf',如查询结果为下图则表示成功,可以进行PDF的全文检索了。

l

图3 执行结果

七、查询语法及示例

5.      语法

CONTAINS
( {column| * } ,'<contains_search_condition >'
)

< contains_search_condition >::=
{< simple_term >
| < prefix_term >
| < generation_term >
| < proximity_term >
| < weighted_term >
}
| { ( <contains_search_condition > )
{AND | AND NOT | OR } < contains_search_condition > [ ...n ]
}

< simple_term > ::=
word |" phrase "

< prefix term> ::=
{ "word * " | "phrase *"}

< generation_term > ::=
FORMSOF ( INFLECTIONAL,< simple_term > [,...n ] )

< proximity_term > ::=
{< simple_term > | < prefix_term > }
{ { NEAR | ~ } { < simple_term > | < prefix_term >} } [ ...n ]

< weighted_term > ::=
ISABOUT
( {{
<simple_term>
| < prefix_term >
| < generation_term >
| < proximity_term >
}
[ WEIGHT ( weight_value ) ]
} [ ,...n ]
)

6.      示例

1.        查找文件内容含“合同”的数据。

select * from SampleBlobTable where contains(filecontent,'合同')

注意:如果查询条件中包含空格,查询条件需用双引号括起来,如'””',否则视为语法错误

2.        查找文件内容含“归档”或“标题”的数据。

select * from SampleBlobTable where contains(filecontent,'归档 OR 标题')

注意:多个词之间用逻辑操作符连接 (包括 AND AND NOTOR)。如果词中包含空格,那么这个词要用双引号括起来。

3.        查找文件内容含“北京?站”的数据。

select * from SampleBlobTable where contains(filecontent,'北京Near ')

注意:上述sql语句将返回包含“北京站”、“北京西站”、“北京东站”等“北京”与“站”无间隔或间隔一个汉字(如果是英文则为一个单词)的数据,不会包含“北京东南站”的数据。

4.        查找所有开头字母为”hu”的数据。

  select * from SampleBlobTable wherecontains(filecontent,'hu*')

注意:上述sql语句将返回包含”human””hungry”等单词的数据,此语法只针对英文有效,针对中文*”符号无论有无,效果均相同。

 

5.        加权查询

 select * from SampleBlobTable where contains(filecontent,'ISABOUT (city weight (.8),county weight (.4))')

注意:上述sql语将将针对citycounty两个词进行不同权重的查询,权重不同将影响返回数据集的显示顺序(如果限定返回数量,则间接影响是否返回数据)。

6.        多态查询

select * from SampleBlobTable where contains(filecontent,'FORMSOF (INFLECTIONAL,dry)')

注意:查询将返回包含”dry””dried””drying”等数据,针对英语有效。

附:文档修改历史

内容

修改

时间

备注

创建

卞吉东

2012-03-29

 

增补

卞吉东

2012-04-01

增加支持PDF文件方法

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐