创建全文索引----SQLserver
1、启动 Microsoft Search 服务
开始菜单-->SQL程序组-->服务管理器-->下拉筐-->Microsoft Search 服务-->启动它。
2、 ..\Microsoft SQL Server\MSSQL\FTDATA\SQLServer\Config\目录里建一个非空noise.chs文件
非空noise.chs文件,也有人说是空的noise.chs文件,但我每次都往里写几个没用的字母。
3、建立环境
打开查询分析器-->执行下列脚本:
--则使用sp_fulltext_database 打开该功能
if(select databaseproperty('DeviceInfoPortal','isfulltextenabled'))=0
execute sp_fulltext_database 'enable'
--建立全文目录FT_PUBS
execute sp_fulltext_catalog 'FT_DeviceInfoPortal','create'
--创建唯一索引
create unique clustered index Idx_files_id on dbo.files(fileid)
--为title表建立全文索引数据元
execute sp_fulltext_table 'files','create','FT_DeviceInfoPortal','Idx_files_id'
--设置全文索引列名
--execute sp_fulltext_column 'files','content','add'
execute sp_fulltext_column @tabname = 'files',@colname = 'content',@action = 'add',@type_colname = 'type';
--execute sp_fulltext_column 'files','content','drop'
--建立全文索引
--activate,是激活表的全文检索能力,也就是在全文目录中注册该表
execute sp_fulltext_table 'files','activate'
--填充全文索引目录
execute sp_fulltext_catalog 'FT_DeviceInfoPortal','start_full'
go
--在您可以使用操作系统筛选器、断字符和词干分析器之前,您必须将它们加载到服务器实例中
execute sp_fulltext_service @action='load_os_resources', @value=1;
--检查全文目录填充情况
While fulltextcatalogproperty('FT_DeviceInfoPortal','populateStatus')<>0
begin
--如果全文目录正处于填充状态,则等待30秒后再检测一次
waitfor delay '0:0:30'
end
select *
from files
where CONTAINS(*,'运行记录')
or CONTAINS(*,'Understanding')
or CONTAINS(*,'全文搜索')
or CONTAINS(*,'出厂日期')
结果如下:
全文索引中的几个问题:
1. 搜索时出现错误:
服务器: 消息 7619,级别 16,状态 1,行 2
查询子句只包含被忽略的词
这种情况修改 \Mssql\Ftdata\Sqlserver\Config 下对应语言的干扰词列表文件
2. 修改了干扰词文件,查询中文时仍然出现上述问题
a. 首先检查你的SQL有没有安装最新的补丁,检查的方法是在查询分析器中运行:
select @@version
如果出来的版本号是8.00.760以下,则表明你未安装sp3的补丁,要装上。
注意下载后,执行的时候是解压,要在解压后的目录中执行setup.bat才是真正的安装。
b. 配置全文索引时,单词断字符选择"中文(中国)"
c. Noise.chs文件中至少有一个单词,例如:?
d. 如果在全文检索时,你能正常修改干扰词文件,说明你的全文检索没有使用上这个文件。
如果你配置的全文检索应该要用到这个文件,那就在
“企业管理器--展开你的数据库--右键全文目录--重建全部全文目录”
3. 表中的数据改变后,检索不到。
方法1. 右键你的表--全文索引表--启用增量填充
方法2. 右键你的表--全文索引表--更改跟踪,这样以后的修改会自动填充(有一定延迟)
4. SQL Server 2000以上才支持对image列的全文检索。