SQL Server 全文搜索 配置、查询初体验

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
简介: 原文:SQL Server 全文搜索 配置、查询初体验 一、使用SQL Server全文搜索配置   要使用SQL Server的全文搜索服务,需要进行如下配置。   1、开启全文搜索服务:      2、开启数据库的全文索引功能:   --开启数据库的全文搜索功能   EX...
原文: SQL Server 全文搜索 配置、查询初体验

一、使用SQL Server全文搜索配置

  要使用SQL Server的全文搜索服务,需要进行如下配置。

  1、开启全文搜索服务:

  

  2、开启数据库的全文索引功能:

  --开启数据库的全文搜索功能
  EXEC sp_fulltext_database 'enable';

  3、创建全文索引目录:

  --创建全文索引目录
  CREATE FULLTEXT CATALOG IndexCatalog
     ON FILEGROUP [PRIMARY]
     IN PATH 'E:\SQLServerIndex'
     AS DEFAULT

  4、创建唯一索引:

  --创建唯一索引
  CREATE UNIQUE NONCLUSTERED INDEX IndexContent ON Article(ArticleContent ASC)

  5、创建全文索引:

  --创建全文索引
  CREATE FULLTEXT INDEX ON Article
  (ArticleContent)
  KEY INDEX IndexContent ON IndexCatalog    --IndexContent是唯一索引名

二、使用全文搜索

  CONTAINS搜索方式

  1.简单词搜索 - 搜索一个或多个特定的词或短语。词可以包括一个或多个字符,中间没有空格或标点。短语可以由空格分隔的多个词组成,但词之间可以有标点也可以没标点:

  --搜索文章内容含有张三或者李四的记录
  SELECT * FROM Article WHERE CONTAINS(ArticleContent,'"张三" OR "李四"')

  2.前缀词搜索的方式 - 搜索指定文本开头的词或短语,前缀词的搜索方式主要是用在搜索英文中,例如搜索以“do”开头的单词,则可以将doctordocumentdownload等单词都搜索出来。

  --搜索文章内容中含有以'认'开始的词的记录
  SELECT * FROM Article WHERE CONTAINS(ArticleContent,'"认*"')    --认为,认识

  3.加权词搜索的方式 - 给多个搜索条件加上权值,加权值越高的记录排在越前面,当以多个字符串作为搜索条件搜索记录时,可以为不同的字符串加上一个加权值,这个加权值是介于01之间的数值,加权值越高的记录排在越前面。事实上在该SELECT语句的返回结果集里,并没有按加权值的大小来排序,因为WEIGHT不影响CONTAINS查询的结果,只会影响CONTAINSTABLE查询中的排序:

  --在CONTAINS搜索中,权重并不影响排序
  SELECT * FROM Article
  WHERE CONTAINS(ArticleContent,'ISABOUT ("北京" weight(0.9),"上海"  weight(0.6),"广州"  weight(0.5))')

  4.邻近词搜索的方式 - 可以搜索与另一个词或短语相邻近的词或短语:

  --搜索文章内容中第二个词在第一个词附近的记录
  SELECT * FROM Article WHERE CONTAINS(ArticleContent,'"张三" NEAR "李四"')

   FREETEXT搜索方式

  FREETEXT搜索方式与CONTAINS搜索方式相比,其搜索结果表现都十分不精确,因为FREETEXT的搜索方式是将一个句子中的每个单字拆分开进行搜索的。使用CONTAINS搜索方式搜索条件为“教育部”的记录,那么搜索出来的将是记录里包含“教育部”三个字符串的记录。

  --搜索文章内容中包含'程'字和'社'字的记录
  SELECT * FROM Article WHERE FREETEXT(ArticleContent,'程社')    

  CONTAINSTABLE搜索方式

  1、CONTAINSTABLE基本搜索:

  --CONTAINSTABLE搜索文章内容中含有友谊的记录
  SELECT * FROM CONTAINSTABLE(Article,ArticleContent,'友谊') as table1

  留意到返回中指包含了两个字段:

  

  其实就是CONTAINSTABLE表中的数据。

  2、CONTAINSTABLE返回所需列:

  --CONTAINSTABLE搜索返回所需列
  SELECT * FROM Article JOIN
    CONTAINSTABLE(Article,ArticleContent,'"环境"',2) as table1
    ON Article.ArticleContent = table1.[KEY]
  ORDER BY table1.RANK DESC

  

  3、CONSTAINSTABLE按符合条件排序

  --按符合条件排序
  SELECT * FROM Article JOIN
      CONTAINSTABLE(Article,ArticleContent,' "泰国" NEAR "高铁" ',10) as table1
      ON Article.ArticleContent = table1.[KEY]
   ORDER BY table1.RANK DESC

  看到查询结果的确按符合条件进行了排序:

  

   4、CONSTAINSTABLE按按权值排序

复制代码
  --权重值排序
  SELECT * FROM Article JOIN
  CONTAINSTABLE(Article,ArticleContent,
  'ISABOUT ("泰国" weight(0.9),
  "高铁"  weight(0.6),
  "环境"  weight(0.1))') AS TABLE1
  ON Article.ArticleContent = TABLE1.[KEY]
  ORDER BY TABLE1.RANK DESC
复制代码

  结果按照权重值排序:

  

   使用FREETEXTTABLE搜索

   单个字搜索,但是多了参数可供使用:语法如下:

  FREETEXTTABLE (table , { column_name | (column_list) | * }
  , 'freetext_string'
  [ ,LANGUAGE language_term ]
  [ ,top_n_by_rank ] )

  示例:

  

  搜索image字段

  在SQL Server 2005的image类型的字段里,不仅仅是可以存储图形文件,还可以存储如可执行文件、音乐文件、文本文件等众多文件类型。SQL Server 2005支持对存储在image类型的字段里的一些文件的内容进行全文搜索,但在创建全文索引时必须指明存储在image字段里的文件的类型。

  SQL Server 2005支持对存储在image中的纯文本文件、网页文件、Word文件、Excel文件和PowerPoint文件的内容进行查询,其扩展名字段必须分别为txt、htm、doc、xls和ppt。全文索引创建完毕后,对image字段里的文件内容进行查询的方法与其他字段的查询方法是一样的:

  SELECT 编号,标题,文件,扩展名 FROM 文章 WHERE CONTAINS(文件,'数据库')

三、小结与评价

  下面给出这个SQL Server全文搜索的常用SQL语句:

复制代码
--开启数据库的全文搜索功能:
EXEC sp_fulltext_database 'enable'; --数据库启用全文索引
--关闭数据库的全文搜索功能:
EXEC sp_fulltext_database 'disable'; --数据库禁用全文索引


--如果你忘记了全文索引的目录、表、列创建过全文索引
EXEC sp_help_fulltext_catalogs    --全文索引目录
EXEC sp_help_fulltext_columns    --全文索引列
EXEC sp_help_fulltext_tables    --全文索引表
复制代码

  感觉这个东西有点鸡肋的感觉,其中最大最大的限制就是,由于全文索引只能建在唯一索引列上,导致创建全文索引的列不能超过900个字节的长度,这个限制了它基本上不会被考虑了,因为连一篇文章都索引不了,只能用于一些非常小的字符串。

 

 
 
相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
目录
相关文章
|
8天前
|
SQL 人工智能 算法
【SQL server】玩转SQL server数据库:第二章 关系数据库
【SQL server】玩转SQL server数据库:第二章 关系数据库
47 10
|
10天前
|
SQL
sql语句加正则 简化查询
sql语句加正则 简化查询
13 0
sql语句加正则 简化查询
|
28天前
|
SQL
sql server链接查询
sql server链接查询
17 1
|
28天前
|
SQL
sql server简单查询
sql server简单查询
14 1
|
18天前
|
SQL 关系型数据库 MySQL
mysql一条sql查询出多个统计结果
mysql一条sql查询出多个统计结果
13 0
|
18天前
|
SQL
启动mysq异常The server quit without updating PID file [FAILED]sql/data/***.pi根本解决方案
启动mysq异常The server quit without updating PID file [FAILED]sql/data/***.pi根本解决方案
16 0
|
8天前
|
SQL 算法 数据库
【SQL server】玩转SQL server数据库:第三章 关系数据库标准语言SQL(二)数据查询
【SQL server】玩转SQL server数据库:第三章 关系数据库标准语言SQL(二)数据查询
66 6
|
28天前
|
SQL
sql高级查询
sql高级查询
12 0
|
1月前
|
SQL 存储 数据可视化
10个高级的 SQL 查询技巧
10个高级的 SQL 查询技巧
|
8天前
|
SQL 存储 数据挖掘
数据库数据恢复—RAID5上层Sql Server数据库数据恢复案例
服务器数据恢复环境: 一台安装windows server操作系统的服务器。一组由8块硬盘组建的RAID5,划分LUN供这台服务器使用。 在windows服务器内装有SqlServer数据库。存储空间LUN划分了两个逻辑分区。 服务器故障&初检: 由于未知原因,Sql Server数据库文件丢失,丢失数据涉及到3个库,表的数量有3000左右。数据库文件丢失原因还没有查清楚,也不能确定数据存储位置。 数据库文件丢失后服务器仍处于开机状态,所幸没有大量数据写入。 将raid5中所有磁盘编号后取出,经过硬件工程师检测,没有发现明显的硬件故障。以只读方式将所有磁盘进行扇区级的全盘镜像,镜像完成后将所
数据库数据恢复—RAID5上层Sql Server数据库数据恢复案例