SQLServer2000提供的全文检索功的基础是全文索引。也就是说,在实现全文检索之前,首先要建立全文索引。 什么是全文索引?一个全文索引存储了表中若干个列的具体内容。全文检索就是利用全文索引中的信息查找有特定字符串的数据行。 在开始操作数据库之前先了解几个概念(数据库、表、全文索引目录、全文索引)之间的关系:
 其中,表与全文索引一一对应。每个表只能有一个全文索引,同时也只能属于一个全文索引目录。 注:SQL Server 2000 的Standard Edition 和Enterprise Edition 版本提供了对表数据中字符串的复杂检索功能---全文检索(Full-Text Searches)。此功能需要在安装时通过自定义安装选项来添加。
一、 启动全文检索服务 1. 从Enterprise Manager启动

2. 从服务管理程序启动

二、 创建全文索引目录 1 在Enterprise Manager的目录树中选择要创建全文索引目录的数据库,右键单击“新建->新建全文目录”,显示如下图所示对话框:

2. 在上图对话框中输入要创建的全文索引目录名称和文件存放位置。SQLServer 默认的存放目录是“安装目录\MSSQL\FTDATA”,在此目录下将为每个全文索引目录单独创建一个目录,目录名称与图中指定的名称不同,是由系统生成的。单击“调度” 页框,在该页框中点击“新建目录调度”则会出现如下图所示的全文索引目录调度对话框。

3. 在上图中可以创建、编辑全文索引目录执行计划。单击“确定”按钮,则创建全文索引目录。
三、 创建全文索引 1. 首先点选要创建全文索引的表,然后点击右键菜单中的“全文索引表->在表上定义全文索引”,启动全文索引向导 2. 按照向导指示,选择建立索引的列,如下图所示:

四、 全文检索查询
进行全文检索需要在SELECT命令的WHERE语句中使用两个Transact-SQL谓词:CONTAINS和FRETEXT
1.CONTAINS CONTAINS 谓词的语法如下 CONTAINS ( { column_name | * } , < 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 ] } 其含义是检索列中包含有符合< contains_search_condition >检索条件的信息。其中,“column_name”必须是包含在全文索引中的列,“*”表示检索条件应用到所有包含在全文索引中的列上。CONTAINS谓词的含义与LIKE谓词相似,但CONTAINS的功能更强大,支持更多的查询方式,并且对大小写不敏感。
< contains_search_condition >检索条件可以为以下形式:
(1)< simple_term > 单词或短语 语法:< simple_term >::= word | phrase 例1:查找公司名称中含有“technology”单词的公司信息 select * from firms where contains(f_name,'technology') 例2:查找公司介绍中含有“science and technology”短语或“information”单词的公司信息 select * from firms where contains(f_intro,'"science and technology" or "information"')
(2)< prefix_term > 单词或短语的前缀 语法:< prefix_term >::= {"word*"|"phrase*"} 例3:查找公司名称中含有以“info”开头的单词的公司信息 select * from firms where contains(f_name,'"infor*"')
(3)< generation_term >,单词及其变体 语法: < generation_term >::= FORMSOF(INFLECTIONAL,<simple_term>[,...n]) 所谓单词的变体就是指由一个单词派生出的单词,如“go”单词的变体有“goes”等。 例4:查找公司介绍中含有“limit”单词及其变体单词的公司信息 select * from firms where contains(f_intro,'formsof(inflectional,limit)')
(4)< proximity_term > 两个或多个位置靠近的单词 语法:<proximity_term>::= {<simple_term>|<prefix_term>} {{NEAR|~}{<simple_term>|<prefix_term>}}[,...n] 其中,“NEAR”与“~”的含义一致。 例5:查找公司介绍中含有“software”单词,并且在其后面的文字中有“company”单词的公司信息。 select * from firms where contains(f_intro,'"software" NEAR "company"') 例6:查找公司介绍中含有“management”单词,并且在其后面的文字中有“system”,其前面的文字中有“MIS”单词的公司信息 select * from firms where contains(f_intro,'"MIS" NEAR "management" NEAR "system"')
(5)< weighted_term > 指定了权重的单词 语法: < weighted_term >::= ISABOUT({{<simple_term> |<prefix_term> |<generation_term> |<proximity_term>} [WEIGHT(weight_value)]}[,...n]) 指定返回的查询结果必须与ISABOUT()中指定所有的单词或短语匹配,权重值weight_value是一个从0.0到1.0之间的数值,指定的是单词的匹配程度,在程序语句中使用时可以省略小数点前面的0。 例:查找公司介绍中含有“software”、"system"、“infomation”等单词的公司信息,单词的权重分别为0.9、0.5、0.3。 select * from firms where contains(description, ISABOUT(software weight(.9), system weight(.5), information weight(.3)))
2.FREETEXT FREETEXT谓词语法:FREETEXT({column_name|*},'freetext_string') FREETEXT谓词的含义与CONTAINS类似,但它比CONTAINT功能弱,只支持纯文字的搜索,即freetext_string只能为单词、短语或句子,不能使用逻辑表达式等。
|
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步