2-5 全文检索技术

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS SQL Server,基础系列 2核4GB
简介:
2-5 全文检索技术
u       了解什么是全文检索,全文检索和普通索引的区别是什么
u       熟练掌握配置全文检索服务,了解配置全文检索服务意外处理办法
u       熟练掌握通过CONTAINSFREETEXT谓词进行查询的技巧,可以区分二者之间的差异
u       了解全文检索中降噪词的作用
 
在一个产品介绍网站中查询产品时,由于产品的介绍性文字可能会很长,如果使用对产品介绍字段使用 like 进行模糊查询,性能肯定会是问题。那么如何解决这个问题呢?第一个想法就是使用全文索引。那么全文索引是什么、应该如何应用、在应用的过程中又应该注意哪些事情呢?
2-5-1 全文检索概述
1. 什么是全文检索
全文索引为在字符串数据中进行复杂的词搜索提供有效支持。全文索引存储关于重要词和这些词在特定列中的位置的信息。全文查询利用这些信息,可快速搜索包含具体某个词或一组词的行。
全文索引包含在全文目录中。每个数据库可以包含一个或多个全文目录。一个目录不能属于多个数据库,而每个目录可以包含一个或多个表的全文索引。一个表只能有一个全文索引,因此每个有全文索引的表只属于一个全文目录。全文目录和索引不存储在它们所属的数据库中。目录和索引由  Microsoft  搜索服务分开管理。全文索引必须在基表上定义,而不能在视图、系统表或临时表上定义。
可以做这样一个比喻。大家大概都见过档案柜,档案柜是将各种档案按照分类登记在档案索引卡上,这个档案柜中的索引卡就象建立的全文索引,通过这些档案索引卡可以迅速定位你要查找的卷宗所在的位置。如果不建立这些索引卡,如果卷宗数量不多还好,一旦档案数量很多的时候显然很难找到期望的卷宗,这就类似使用 Like 的情形。表 2-9 所示为全文检索的基本原理。
 

2-9 全文检索基本原理
2. 全文检索和普通索引的区别
该区别具体见表 2-7 所示。
2-7 全文检索和普通索引的区别
普通SQL 索引
全文索引
存储时受定义它们所在的数据库的控制
存储在文件系统中,但通过数据库管理
每个表允许有若干个普通索引
每个表只允许有一个全文索引
当对作为其基础的数据进行插入、更新或删除时,它们会自动更新
将数据添加到全文索引称为填充,全文索引可通过调度或特定请求来请求,也可以在添加新数据时自动发生
不分组
在同一个数据库内分组为一个或多个全文目录
使用SQL Server企业管理器、向导或Transact-SQL语句创建和除去
使用SQL Server企业管理器、向导或存储过程创建、管理和除去
2-5-2 配置全文检索服务实验
1. 系统初始配置
为了实验方便起见,我们选择某个论坛数据库 bbs ,该数据库中有一张表 bbs_ly (留言信息表),该表的属性 ly_content 为留言内容属性,为本次实验主要进行全文配置的属性。其基本结构见图 2-10 所示。
首先建立检索表的全文检索,全文检索要求唯一索引,故需要在相关表建立唯一聚集索引。这一步实验可以使用 SQL DDL 或者 SQL Server Management Studio 建立表的全文检索,如图 2-11 所示;或者通过键入命令 EXEC SP_FULLTEXT_DATABASE   'Enable' 命令达到同样效果。
USE bbs;
EXEC sp_fulltext_database 'enable';
GO

 

 

 
2-10 ly_content属性为留言内容属性                 2-11 配置bbs_ly 表使用全文索引
2. 定义表的全文检索目录和索引字段
展开该数据库的表,在准备实施全文检索的表上面用鼠标右键通过点击 全文检索 -> 定义全文检索 将弹出如下执行向导,本向导执行完毕则该表的全文检索业已完毕。如图 2-12 所示。

2-12 定义表的全文检索目录和索引字段
3. 定义表的全文检索目录和索引字段
选择要进行全文检索的字段,点击下一步后,出现全文索引向导,一般选择自动执行更改追踪。如图 2-13 所示。
4. 配置全文索引向导出错的解决方案
下面首先开始出现的是配置全文索引向导,比较容易出现的填充失败情况如图 2-14 所示。解决的方案是从网上下载 SQL Server 2005 Sp3 补丁,安装后即可以上面的解决问题。
5. 选择或创建新的索引目录
在进行全文检索时候,必须为操作数据库指定索引目录,从而方便定期更新索引和全文目录的文件存储需要,如图 2-15 所示。
 

2-13 定义表的全文检索目录和索引字段
 

2-14 配置全文索引向导出错示意图
 

2-15 选择或创建新索引目录
6. 新建表计划和新建目录计划
打开定义填充计划窗口,分别新建表计划和新建目录计划,如图 2-16 所示。
 

2-16 新建表计划和新建目录计划
7. 新建表计划
首先配置全文索引表计划,在计划类型中选择重复执行,并详细配置执行的频率为每天 11 21 28 秒执行,无结束日期,点击确定保存,如图 2-17 所示。
 

2-17 新建表计划
8. 新建目录计划
其次配置目录计划,配置流程与全文检索表计划相同,如图 2-18 所示。
 

2-18 新建目录计划
9. 新建计划工作结束
配置完全文索引表计划和目录计划后,将在填充计划里面显示计划信息内容,点击下一步继续全文索引的配置工作,如图 2-19 所示。
 

2-19 新建计划工作结束
10. 新建计划工作结束
全文索引的配置工作至此完成,系统将显示配置的详细列表信息给 DBA 。点击完成,全文索引的配置将自动执行索引的配置工作,直至各项全部成功完成为止。如图 2-20 2-21 所示。
 

2-20 新建计划工作结束
 

2-21 新建计划工作结束
11. 查询全文检索服务的相关信息
全文索引查询是通过 CONTAINS FREETEXT 谓词进行查询,下面依次介绍这两个谓词:
q         CONTAINS 谓词语法格式:
CONTAINS({column_name|(column_list)|*},‘<contains_search_condition >’)
1
select * from bbs_ly where contains(Ly_content,'
2
select * from bbs_ly where CONTAINS(Ly_content, '"*
  注意:
    如果关键词仅包括干扰词,则会报如下错误:
    CONTAINS({column_name|(column_list)|*},‘<contains_search_condition >’)
    服务器: 消息 7619,级别 16,状态 1,行 1,全文操作运行失败。查询子句只包含被忽略的词。
小知识:
q         数据库全文检索的降噪词是什么?
windows
MSSQL2005
q         FREETEXT 谓词语法格式:
FREETEXT({column_name|(column_list)|*},'freetext_string'[,LANGUAGE anguage_term])
1
SELECT * FROM bbs_ly WHERE FREETEXT (Ly_content, '
  注意:
q         使用 FREETEXT 的全文查询没有使用 CONTAINS 的全文查询精度高,这一点读者可以从检索的结果看出来。




本文转自 qianshao 51CTO博客,原文链接:http://blog.51cto.com/qianshao/348299,如需转载请自行联系原作者

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS&nbsp;SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/sqlserver
目录
相关文章
|
Web App开发 关系型数据库 数据库
用PostgreSQL 做实时高效 搜索引擎 - 全文检索、模糊查询、正则查询、相似查询、ADHOC查询
用PostgreSQL 做实时高效 搜索引擎 - 全文检索、模糊查询、正则查询、相似查询、ADHOC查询作者digoal 日期2017-12-05 标签PostgreSQL , 搜索引擎 , GIN , ranking , high light , 全文检索 , 模糊查询 , 正则查询 , 相似查询 , ADHOC查询 背景字符串搜索是非常常见的业务需求,它包括: 1、前缀+模糊查询。
11636 1
|
7月前
|
搜索推荐 Java Shell
1.全文检索
1.全文检索
|
存储 SQL 搜索推荐
01全文检索技术介绍
01全文检索技术介绍
90 0
|
数据采集 存储 Java
02Lucene实现全文检索的流程
02Lucene实现全文检索的流程
52 0
|
自然语言处理 算法 UED
全文搜索
全文搜索树设计思路
126 0
|
存储 自然语言处理 NoSQL
使用Redisearch实现的全文检索功能服务
“检索”是很多产品中无法绕开的一个功能模块,当数据量小的时候可以使用模糊查询等操作凑合一下,但是当面临海量数据和高并发的时候,业界常用 elasticsearch 和 lucene 等方案,但是elasticsearch对运行时内存有着最低限额,其运行时大小推荐 2G 以上的内存空间,并且需要额外的磁盘空间做持久化存储。
使用Redisearch实现的全文检索功能服务
|
存储 搜索推荐 开发者
全文检索技术使用场景|学习笔记
快速学习全文检索技术使用场景
201 0
|
SQL 存储 搜索推荐
什么是全文检索
全文检索技术被广泛的应用于搜索引擎,查询检索等领域。我们在网络上的大部分搜索服务都用到了全文检索技术。 对于数据量大、数据结构不固定的数据可采用全文检索方式搜索,比如百度、Google等搜索引擎、论坛站内搜索、电商网站站内搜索等。
649 0
什么是全文检索
|
自然语言处理 搜索推荐 关系型数据库
ElasticSerach学习(三)-全文检索
ElasticSerach学习(三)-全文检索
153 0
|
XML 存储 自然语言处理
全文检索技术-solr
文字涉及Solr的安装及配置、使用Solr的后台管理索引库、使用SolrJ管理索引库、电商案例实现等
674 0
全文检索技术-solr