由于最近有项目需要涉及到文章内容的查询,因此开始关注全文检索,传统的方法是使用like(貌似不支持text、ntext型的列)或者charindex,这样的效率非常非常低,如果有一万以上的文章,基本上没有耐心去等待结果的输出。
所幸sqlserver提供了全文检索的支持,事实上配置是非常简单的,每个数据库下面都有一个“全文目录”功能结点,默认进去的话是没有任何项目的,而且也不能建立目录,这是因为没有在该数据库启用全文检索服务,下面这条语句可以判断数据库是否启用全文检索并且根据结果做出合适的行动:
if (select DATABASEPROPERTY(DB_NAME(), N'IsFullTextEnabled')) <> 1
exec sp_fulltext_database N'enable'
当然也可以通过启用“支持服务”下面的“全文检索”启动。
一旦启用这个之后,数据库中的全文索引功能即被激活,您可以直接使用企业管理器进行创建目录、填充目录等操作,这些具体的操作基本上是通过按鼠标右键进行的。
其实部署全文检索的大致步骤是(我的理解,比较肤浅):
-
启用全文索引功能
exec sp_fulltext_database 'enable'
-
创建全文索引目录
exec sp_fulltext_catalog 'ft_ Catalog ', 'create'
-
为索引目录添加表
exec sp_fulltext_table '[dbo].[FA_IBOX_Info]', 'create', 'ft_ Catalog ', 'PK_FA_IBOX_Info'
-
填充数据
exec sp_fulltext_column N'[dbo].[FA_IBOX_Info]', N'fdIbinContent', N'add', 2052
-
激活
exec sp_fulltext_table N'[dbo].[FA_IBOX_Info]', N'activate'
下面是官方文档描述的步骤:
全文查询有关的系统存储过程
(1)启动数据库的全文处理功能(sp_fulltext_datebase);
(2)建立全文目录(sp_fulltext_catalog);
(3)在全文目录中注册需要全文索引的表(sp_fulltext_table);
(4)指出表中需要全文检索的列名(sp_fulltext_column)
(5)为表创建全文索引(sp_fulltext_table);
(6)填充全文索引(sp_fulltext_catalog)。
一旦建好之后,我们就可以来见识下全文检索的威力了,输入下面的语句测试下:
select * from table where contains(column,'key')
注意这个column必须添加到了全文索引中,如何添加?选中表后按右键->全文索引属性。
由于全文目录是存放在硬盘的其他地方,因此数据表中的数据修改或者添加之后,全文索引不会更新,哪么难道又要手动去填充索引吗?答案是否定的,微软早就考虑到了:
-
右键你的表--全文索引表--启用增量填充方法
-
右键你的表--全文索引表--更改跟踪,这样以后的修改会自动填充(有一定延迟)
全文索引的几个重要函数
-
-
freetext(column, 'key1 key2 key3...') ,搜索包含key1或者key2或者key3....的数据。
下面的一篇文章告诉您如何可视化的(企业管理器)操纵全文索引:http://doc.linuxpk.com/34158.html