SQL Server 全文检索初探
来源:互联网 发布:谷歌软件 编辑:程序博客网 时间:2024/05/01 23:57
创建Catalog
现在您需要创建一个全文catalog。该目录似乎是一个容器,把所有的全文索引到。因此,如果你要搜索需要的三个表的文本,需要生成三个索引(每个表一个索引),并且把三个索引放在一个catalog中。
提示:在微软网站涉及相关操作的一些信息到需要SQL完整版本,如“Storage folder”就是Express版本没有的。
别着急,下面大家来不通过管理界面手动创建一下catalog。Demo中,只创建了一个catalog,并把两个full-text index放入其中。个人的一些经验,如果一个index涉及的数据量较大,你应该为每一个index创建一个单独的catalog。
下面操作是如何创建一个catalog:
- 程序—SQL SERVER管理界面—连接需要操作的数据库
- 点击 “New Query”
- 输入:
go
EXEC sp_fulltext_database ‘enable’
go
CREATE FULLTEXT CATALOG catalogName
go
说明:DBName指要操作数据库名称;catalogName指catalog的名字,根据自己需要定义
- 执行上述SQL语句,将会做两件事情,在相应数据库上enable fulltext searching;创建全文目录
提示:如果目录将会很大的话,把目录放在其他硬盘或者地址会是一个明智的选择。这样会很大程度的提高性能。
创建全文索引
创建全文索引的一个前提是,表中必须有这样的一个索引“unique, single-column, non-nullable index”。大多数情况下,主键都会满足这样的要求。
SQL Server这样做的实际要求是:
1. 必须有非空索引(主键都会满足这样的要求)。
2. 索引必须作用在单独一个列上。复合主键是不满足这个要求,一个work around是可以新建立一列,如textid,int型,自增,并建立索引。
提示:如果你的主键过长,笔者也建议新建一个int型自增列,例如主键是GUID的话,那么创建全文索引开销会是非常巨大的。
创建全文索引步骤
- 保证上面提到的条件; unique, single-column, non-nullable index
- 输入SQL 语句
(
column_to_index
Language 0X0
)
KEY INDEX yourindex ON yourcatalog
WITH CHANGE_TRACKING AUTO
说明:
yourdatabase.dbo.yourtable: 使用者数据库的名字和表明
column_to_index: 含有全文内容的列
yourindex:表里的索引(就是上面描述需满足unique, single-column, non-nullable index的索引)
yourcatalog: 本文开始时创建过的catalog名字
Language:告诉 SQL Server可以是任意语言(当然你也可以通过Management Studio修改成中文,英文等,具体语言编码这里不敖述)
提示:如果你的表数据量很大,建立全文索引会需要一定的时间,甚至会出现一段时间CPU使用率为100%的情况。
使用全文检索
下面来使用一下,输入SQL语句:
SELECT description
FROM yourtable
WHERE CONTAINS(description, '"NBA Playoff"')
提示:
1. 字符串的格式,最外面是单引号,里面是双引号,最里面是要查找的文本。
2. 想要模糊一把的话,请使用*, 如’”NBA*”‘会查找所有以NBA开头的文本。
3. 不支持开始模糊,笔者不才,’”*BA*”‘这样是查不出东西的,大家如有办法,欢迎指点
一些调试方法
- SQL Server Log: C:/Program Files/Microsoft SQL Server/MSSQL.1/MSSQL/LOG
- FullText Index Log: SQLFTxxxxxx.LOG
提示:可读性很差,但真正了解之后对Debug是很有帮助的。
其他
1. SQL Server 2005之后,允许一个表拥有两个及以上全文索引。
2. 查找表中哪一列作为全文检索列 select * from sys.fulltext_indexes
3. 如何添加一个全文索引
exec sp_fulltext_column
‘tabname’,
‘colname’, 'add', '2057'
说明:
tabname: 一段或两段的表名。该表必须已经存在于当前的数据库中。该表必须有全文索引。
colname: 是 qualified_table_name 中某个列的名称。该列必须是一个字符,或是一个 image 列,不能是一个已计算列。
2057: 表示语言, code ‘2057′ 表示 UK English
区域设置区域设置 ID中性0简体中文0×0804繁体中文0×0404荷兰语0×0413英国英语0×0809美国英语0×0409法语0×040c德国0×0407意大利0×0410日语0×0411朝鲜语0×0412现代西班牙语0×0c0a普通瑞典语0×041d
结论
全文检索很容易建立,一旦建立,快速的响应将给使用者和用户带来惊喜!
- SQL Server 全文检索初探
- sql server全文检索
- SQL Server 全文检索
- SQL Server全文检索
- SQL Server全文检索简介
- SQL Server 2000 全文检索
- SQL Server 2000全文检索
- SQL Server 2000 全文检索
- SQL server 全文检索建议
- SQL Server的全文检索
- SQL Server 全文检索技术
- SQL Server 2005 全文检索
- SQL Server 全文检索 -转贴
- SQL SERVER数据库全文检索
- SQL Server 2005 全文检索
- SQL Server 2000全文检索
- sql server 2000全文检索
- SQL Server 2000全文检索
- strftime 函数
- shell输出a-z,A-Z,0-9
- Linux网络协议栈(三)——网络设备(1)
- 图片上传预览
- 行列互转
- SQL Server 全文检索初探
- 关于提高自己JAVA水平的十大技术
- oracle函数
- CListCtrl实现拖拽效果
- csdn网摘工具
- c#窗体间的那点事1
- Linux网络协议栈(三)——网络设备(2)
- 开源界的5大开源许可协议
- 各种字符编码方式详解及由来(ANSI,UNICODE,UTF-8,GB2312,GBK)