sqlserver如何添加全文索引

在SQL Server 中提供了一种名为全文索引的技术,可以大大提高从长字符串里搜索数

据的速度,不用在用LIKE这样低效率的模糊查询了。

下面简明的介绍如何使用Sql2008 全文索引

一、检查服务里面带有Full-text字样的服务是否存在并开启


如果不存在带有Full-text字样的服务的,确认是否安装了sqlserverFullTextSearch

--检查数据库PS2是否支持全文索引,如果不支持
--则使用sp_fulltext_database 打开该功能

if(select databaseproperty(‘PS2‘,‘isfulltextenabled‘))=0
execute sp_fulltext_database ‘enable‘

二、新建全文目录

全文目录是用来存储全文索引的

三、为表定义全文索引

四、点击下一步,按提示选择

1.确认下一步

2.选择唯一索引,通常是主键

3.选择要建立的全文索引列,对于断字符的选择如果列存的是中文就选择chinese,如果是英文就选择English

4.选择索引更新方式,可以先自动更新,以后数据量大了可以设置添加全文索引的计划

5.选择全文目录

五、全文索引的SQL查询关键字

建立好全文索引后就可以使用SQL语句来查询了,主要用带三个关键字 CONTAINS、FREETEXT、CONTAINSTABLE和FREETEXTTABLE

1. CONTAINS

搜索单个词和短语的精确或模糊的匹配项,要搜索的内容必须是个有意义的词语,比如说“苹果”、“建设厅”,不能是一些没意义的词语,比如“阿迪撒啊是”,“儿儿的”这样的词语即使

LIKE是能查询出来,但全文索引对这样没意义的词语可能没有建立索引,查不出来

  1. SELECT *
  2. FROM dbo.Business
  3. WHERE CONTAINS(Address,‘旅游‘)

实现功能:查询Business表中Address列包含“旅游”的行


详细查看:http://msdn.microsoft.com/zh-cn/library/ms187787.aspx

2. FREETEXT

和CONTAINS类似,不同的是它会先把要查询的词语先进性分词然后在查询匹配项

  1. 01.select *
  2. 02.from dbo.Business
  3. 03.where freetext(Address,‘带婴儿旅游‘)

详细查看:http://msdn.microsoft.com/zh-cn/library/ms176078.aspx

3.CONTAINSTABLE

在查询方式上与 CONTAINS 几乎一样。但CONTAINSTABLE 返回的是符合查询条件的表,在 SQL
语句中我们可以把它当作一个普通的表来使用,并且使用 CONTAINSTABLE 的查询对每一行返回一个相关性排名值 (RANK) 和全文键
(KEY)。

  1. SELECT  *
  2. FROM    Business AS FT_TBL
  3. INNER JOIN CONTAINSTABLE(Business, *, ‘ISABOUT (婴儿 WEIGHT (.8),赤水 WEIGHT (.4) )‘)
  4. AS KEY_TBL ON FT_TBL.BusinessId = KEY_TBL.[KEY]
  5. ORDER BY KEY_TBL.RANK DESC

ISABOUT 是这种查询的关键字,weight 指定了一个介于 0~1之间的数,类似系数。表示不同条件有不同的侧重。

CONTAINSTABLE 返回的表包含有特殊的两列:KEY,RANK。

被全文索引的表必须有唯一索引。这个唯一的索引列在返回的表中就成为 KEY。我们通常把它作为表连接的条件。

在某些网站搜索时,结果中会出现表示匹配程度的数字,RANK 与此类似。它的值在0~1000之间,标识每一行与查询条件的匹配程度,程度越高,RANK 的值大,通常情况下,按照 RANK 的降序排列。

详细查看:http://msdn.microsoft.com/zh-cn/library/ms189760.aspx

4. FREETEXTTABLE

在查询方式上与 FREETEXT 几乎一样。但 FREETEXTTABLE 返回的是符合查询条件的表,在 SQL
语句中我们可以把它当作一个普通的表来使用,并且使用  FREETEXT  的查询对每一行返回一个相关性排名值 (RANK) 和全文键
(KEY)。

  1. SELECT  * ,
  2. BusinessID ,
  3. Address
  4. FROM    Business AS FT_TBL
  5. INNER JOIN FREETEXTTABLE(Business, Address, ‘ISABOUT (带婴儿旅游 WEIGHT (.8),赤水 WEIGHT (.4) )‘)
  6. AS KEY_TBL ON FT_TBL.BusinessId = KEY_TBL.[KEY]
  7. ORDER BY KEY_TBL.RANK DESC

详细查看:http://msdn.microsoft.com/zh-cn/library/ms177652.aspx

--activate,是激活表的全文检索能力,也就是在全文目录中注册该表

execute sp_fulltext_table ‘ProSearch‘,‘activate‘

--填充全文索引目录

execute sp_fulltext_catalog ‘ProSearchCatalog‘,‘start_full‘

--查询全文索引是否建立完毕(0:完毕;1:正在建立)

select fulltextcatalogproperty(‘ProSearchCatalog‘,‘populateStatus‘)

三、介绍一下全文索引的一些相关操作
查看全文检索的配置情况:

sp_help_fulltext_catalogs -- 检查数据库有哪些全文目录
sp_help_fulltext_tables ProSearchCatalog -- 查看哪些表把全文索引建立在T_testData下
sp_help_fulltext_columns ProSearch -- 查看test表哪些字段配置了全文索引

删除全文索引必须与创建的时候倒过来一步一步操作:

drop fulltext index on test -- 撤销test上的全文检索
drop fulltext catalog FT_testData -- 撤销全文目录FT_testData
时间: 2024-10-08 20:31:09

sqlserver如何添加全文索引的相关文章

Sqlserver 中添加数据库登陆账号并授予数据库所有者权限

USE master GO --通过sp_addlogin创建登录名 --DEMO:登陆账号 --123456:登陆密码 execute sp_addlogin 'DEMO','123456' --切换数据库 USE dbtest go --在数据库dbtest里创建数据库Demo账号 --每一个DEMO为登陆名 --第二个DEMO为账号 execute sp_grantdbaccess 'DEMO','DEMO' --将DEMO账号添加到数据库角色为数据库所有者 execute sp_addr

SqlServer数据库添加角色,角色授权

有时候我们需要跟第三方共享数据,但是又不能数据库完全开放. 所以使用数据库角色授权就能很好的解决这个问题. 以下是工作中用到的Sql语句.就当是做下笔记. --创建角色 role_TechDB EXEC sp_addrole 'role_TechDB' --授予 role_TechDB 对 GXJG_JZGJCSJZLB,GXXX_YXSDWJBSJZL 表的所有权限 GRANT SELECT,DELETE,INSERT,UPDATE ON GXJG_JZGJCSJZLB TO role_Tec

SqlServer 数据库添加临时表

select  字段1,字段2,字段3 into tempname  form  table  where table.id=1; 这个会给tempname 表中自动生成  字段1,字段2,字段3  三个字段以及值. 修改表字段值,根据nidupdate tablename set 字段1=tb.ssm from ( select  字段 as ssm  from table2 ) tbwhere tbalename.nid=tb.nid 给表添加字段 alter table 表1_201505

在MySQL或者SQLServer中,添加对象后自动返回主键到对象模型中的配置方式

设置是否使用JDBC的getGenereatedKeys方法获取主键并赋值到keyProperty设置的领域模型属性中.MySQL和SQLServer执行auto-generated key field,因此当数据库设置好自增长主键后,可通过JDBC的getGeneratedKeys方法获取.但像Oralce等不支持auto-generated key field的数据库就不能用这种方法获取主键了 <insert id="add" parameterType="Stud

ado.net + sqlserver 批量添加 更新

表结构 DROP TABLE [dbo].[Product] GO CREATE TABLE [dbo].[Product] ( [Id] varchar(36) NOT NULL , [Name] varchar(255) NOT NULL , [Price] decimal(18,4) NOT NULL ) GO ALTER TABLE [dbo].[Product] ADD PRIMARY KEY ([Id]) GO 批量添加 public static void Insert<T>(s

sql-server的添加数据库文件(日志数据)以及收缩数据库文件(日志数据)

环境: SSMS sql-server2016 一.为数据库添加数据文件 添加日志数据文件 以下是添加数据文件和日志文件的代码 ALTER DATABASE [joinbest] ADD FILE ( NAME = N'joinbest_2', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\joinbest_2.ndf' , SIZE = 8192KB , FILEGROWTH

(4.15)全文索引的使用

全文索引的概念:搜索引擎如何工作? 总结就是一句话:直接看倒排索引图. 总结: 词组包含所有存在行的唯一标识. 信息检索已经发展的非常成熟了,应该所有人都不陌生.我有幸这几年接触过并且实际做过一些搜索引擎开发的工作,特此总结并分享给大家.实际上,一个成熟的搜索引擎是想当复杂的,比如百度的,就分nginx,vui,us,as,bs,da.....等等这些模块,当然这些简写的字母大家也不必了解,只要知道它确实复杂就可以. 今天我所讲的是一个简化版的搜索引擎,简化到只涉及到倒排建立和拉取.虽然简单,但

sql server全文索引使用中的小坑 (转载)

一.业务场景 我们在实际生产环境中遇到了这样一种需求,即需要检索一个父子关系的子树数据 估计大家也遇到过类似的场景,最典型的就是省市数据,其中path字段是按层级关系生成的行政区路径: 如果我们已知某市名,想查出同级和高一级的省名,如保定市同级和上级河北省,那么我们有什么实现方式呢 给大家10秒钟,快速抢答 . . . 时间到 大概有以下几种方法: a.2008中新添加的层级数据类型 b.cte递归方式 c.直接程序处理 d.比较傻的方式:全文索引... 层级关系是实现这种业务逻辑的最好方式,比

sql创建全文索引

--创建表TB USE FullTextTest GO IF OBJECT_ID('TB') IS NOT NULL DROP TABLE TB GO CREATE TABLE TB( ID INT IDENTITY(1,1) , Title VARCHAR(200), Detail VARCHAR(1000) CONSTRAINT pk_id PRIMARY KEY(ID) --主键索引 ) --插入数据 INSERT INTO dbo.TB select '火箭即将签下新秀射手',' 据悉,