广告
返回顶部
首页 > 资讯 > 数据库 >SQL Server 全文搜索/全文索引
  • 263
分享到

SQL Server 全文搜索/全文索引

SQLServer全文搜索/全文索引 2014-12-30 09:12:48 263人浏览 才女
摘要

全文引擎使用全文索引中的信息来编译可快速搜索表中的特定词或词组的全文查询。全文索引将有关重要的词及其位置的信息存储在数据库表的一列或多列中。全文索引是一种特殊类型的基于标记的功能性索引,它是由 SQL Server 全文引

SQL Server 全文搜索/全文索引

全文引擎使用全文索引中的信息来编译可快速搜索表中的特定词或词组的全文查询。全文索引将有关重要的词及其位置的信息存储在数据库表的一列或多列中。全文索引是一种特殊类型的基于标记的功能性索引,它是由 SQL Server 全文引擎生成和维护的。生成全文索引的过程不同于生成其他类型的索引。全文引擎并非基于特定行中存储的值来构造 B 树结构,而是基于要编制索引的文本中的各个标记来生成倒排、堆积且压缩的索引结构。

概述

全文引擎使用全文索引中的信息来编译可快速搜索表中的特定词或词组的全文查询。全文索引将有关重要的词及其位置的信息存储在数据库表的一列或多列中。全文索引是一种特殊类型的基于标记的功能性索引,它是由 sql Server 全文引擎生成和维护的。生成全文索引的过程不同于生成其他类型的索引。全文引擎并非基于特定行中存储的值来构造 B 树结构,而是基于要编制索引的文本中的各个标记来生成倒排、堆积且压缩的索引结构。

  • 全文索引是针对数据表,只能对表创建全文索引,不能对数据库创建全文索引。
  • 每个数据库可以不包含全文目录或包含多个全文目录,一个全文目录可以包含多个全文索引,但一个全文索引只能用于构成一个全文目录。
  • 一个数据表只能创建一个全文索引,一个全文索引可以包含多个字段。
  • 创建全文索引的表必须要有一个唯一的非空索引,并且这个唯一的非空的索引只能是一个字段,不能是组合字段。
  • 每个表只允许有一个全文索引。
  • 可以对以下类型的列创建全文索引:charvarcharncharnvarchartextntextimagexmlvarbinary 和 varbinary(max),从而可对这些列进行全文搜索。对数据类型为 varbinaryvarbinary(max)imagexml的列创建全文索引需要您指定类型列,类型列是用来存储每行中文档的文件扩展名(.doc、.pdf、xls 等)的表列。

注意:全文搜索是 SQL Server 数据库引擎的一个可选组件, 如果你在安装 SQL Server 时没有选择全文搜索,请再次运行 SQL Server 安装程序来添加它。

如果已安装了全文搜索组件,可在服务中查看对应的服务是否有运行:

 

 

可以使用以下查询语句来查看对应的数据库是否已开启全文搜索:

SELECT DATABASEPROPERTY("{DatabaseName}", "isfulltextenabled");

 

如果返回结果是 0,可以使用以下脚本进行启用:

EXEC sp_fulltext_database "enable"

 

全文搜索查询与 LIKE 谓词的对比

LIKE与全文搜索不同,LIKE仅对字符模式有效。另外,不能使用LIKE来查询格式化的二进制数据。此外,对大量非结构化的文本数据执行LIKE查询要比对相同数据执行同样的全文查询慢得多。对数百万行文本数据进行的LIKE查询可能需要几分钟的时间才能返回结果;而对于同样的数据,全文查询只需要几秒甚至更少的时间,具体取决于返回的行数。

创建全文目录

全文目录用来存储全文索引。可以直接使用以下脚本进行创建:

CREATE FULLTEXT CATALOG DefaultFullTextCatalog;

 

或者使用管理工具的图形化界面进行创建:

 

 

为数据库表创建全文索引

为数据库表创建全文索引的时候需要指定对应的语言。因为不同的语言的分词都有所差异,SQL Server将会使用对应语言的分词器处理表中的数据。SQL Server的全文搜索支持大约 50 种不同语言,可通过查询sys.fulltext_languages表来查看所有支持的语言。

下面我们对Shop表的ShopName和ShopAddress两个字段添加简体中文的全文索引:

CREATE FULLTEXT INDEX ON [dbo].[Shop]
(  
    [ShopName] LANGUAGE 2052,
	[ShopAddress] LANGUAGE 2052
)  
KEY INDEX [PK_Shop] ON DefaultFullTextCatalog
WITH CHANGE_TRACKING AUTO

  

同样也可以使用管理工具的图形化界面进行创建:

 

 

全文搜索谓词/函数

全文查询使用全文谓词(CONTaiNSFREETEXT)以及全文函数(CONTAINSTABLEFREETEXTTABLE)。它们支持复杂的 Transact-SQL 语法,这种语法支持各种形式的查询词。

CONTAINS

CONTAINS用于在 SQL Server 中搜索单个词和短语的精确或模糊(不太精确的)匹配项、在一定差别范围内的相近词或加权匹配项。

  • CONTAINS 文档

例如,查询商铺名或者地址中有福田的商铺:

SELECT * FROM dbo.Shop WHERE CONTAINS((ShopName, ShopAddress),N"福田")

 

CONTAINSTABLE

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

  • CONTAINSTABLE 文档

所以我们的查询的时候可以使用RANK进行排序,将相关性高的排在前面:

SELECT T0.ShopID,
       T0.ShopName,
       T0.ShopAddress,
       T1.RANK
FROM dbo.Shop T0
    INNER JOIN CONTAINSTABLE
               (Shop, ShopAddress, N"福田") T1
        ON T0.ShopID = T1.[KEY]
ORDER BY T1.RANK DESC;

 

 

 

 

 

FREETEXT/FREETEXTTABLE

FREETEXT/FREETEXTTABLE的用法与 CONTAINS/CONTAINSTABLE一致。不同的在于FREETEXT/FREETEXTTABLE会先把要查询的词句先进行分词然后再查询匹配。

  • FREETEXT 文档
  • FREETEXTTABLE 文档

例如可以直接查询:福田的邮局,查询时SQL Server会自动拆分。

SELECT T0.ShopID,
       T0.ShopName,
       T0.ShopAddress,
       T1.RANK
FROM dbo.Shop T0
    INNER JOIN FREETEXTTABLE
               (Shop, (ShopName, ShopAddress), N"福田的邮局") T1
        ON T0.ShopID = T1.[KEY]
ORDER BY T1.RANK DESC;

 

 

 

另外,可以通过查询sys.dm_fts_parser来查看分词结果:

SELECT * FROM sys.dm_fts_parser (""福田的邮局"", 2052, 0, 0);

 

 

 

更多

以上只列举了SQL Server全文搜索的一些基本知识和简单的用法,更详细的内容可以查看微软的官方文档

  • 全文搜索文档

原文地址:Http://www.zkea.net/codesnippet/detail/sqlserver-fulltext-search.html

您可能感兴趣的文档:

--结束END--

本文标题: SQL Server 全文搜索/全文索引

本文链接: https://www.lsjlt.com/news/7115.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • SQL Server 全文搜索/全文索引
    全文引擎使用全文索引中的信息来编译可快速搜索表中的特定词或词组的全文查询。全文索引将有关重要的词及其位置的信息存储在数据库表的一列或多列中。全文索引是一种特殊类型的基于标记的功能性索引,它是由 SQL Server 全文引...
    99+
    2014-12-30
    SQL Server 全文搜索/全文索引
  • SQL Server 的全文搜索功能
    这篇文章将为大家详细讲解有关SQL Server 的全文搜索功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。SQL Server 的全文搜索(Full-Text Sea...
    99+
    2022-10-18
  • SQL Server的全文搜索功能
    目录一、使用SQL Server全文搜索配置1、开启全文搜索服务:2、开启数据库的全文索引功能:3、创建全文索引目录:4、创建唯一索引:5、创建全文索引:二、使用全文搜索CONTAI...
    99+
    2022-11-13
  • SQL Server实现全文搜索查询详解
    目录一、概述二、全文搜索查询三、将全文搜索查询与 LIKE 谓词进行比较四、全文搜索体系结构4.1、SQL Server 进程4.2、过滤器守护程序主机进程五、全文搜索处理5.1、全文索引过程5.2、全文查询流程六、全文...
    99+
    2023-04-03
    SQL Server全文搜索 SQL全文搜索查询
  • SQL Server如何实现全文搜索查询
    本篇内容介绍了“SQL Server如何实现全文搜索查询”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、概述全文索引在表中包括一...
    99+
    2023-07-05
  • SQL Server的全文搜索功能怎么用
    本文小编为大家详细介绍“SQL Server的全文搜索功能怎么用”,内容详细,步骤清晰,细节处理妥当,希望这篇“SQL Server的全文搜索功能怎么用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知...
    99+
    2023-06-30
  • SQL Server实现全文搜索查询详解
    目录一、概述二、全文搜索查询三、将全文搜索查询与 LIKE 谓词进行比较四、全文搜索体系结构4.1、SQL Server 进程4.2、过滤器守护程序主机进程五、全文搜索处理5.1、全...
    99+
    2023-05-14
    SQL Server全文搜索 SQL全文搜索查询
  • SQL Server全文搜索功能的示例分析
    这篇文章主要为大家展示了“SQL Server全文搜索功能的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“SQL Server全文搜索功能的示例分析”这...
    99+
    2022-10-18
  • SQL Server中怎么实现全文搜索功能
    这期内容当中小编将会给大家带来有关SQL Server中怎么实现全文搜索功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一,创建全文目录和唯一索引创建全文索引之前,必须...
    99+
    2022-10-18
  • SQL Server中怎么实现全文索引服务
    SQL Server中怎么实现全文索引服务,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。SQL7的全文检索和IndexServer的检索方式非...
    99+
    2022-10-18
  • MongoDB之索引(全文索引)
    在一些信息管理平台上经常需要进行信息模糊查询,最早的时候是在某个字段上实现的模糊查询,但是这个时候返回的信息并不会很准确,因为只能够查A字段或者是B字段,而在MongoDB里面实现了非常简单的全文检索。 ...
    99+
    2022-10-18
  • mysql全文搜索fulltext
    mysql> select * from t2; +------+------+----------------------------+ | a    | b &nbs...
    99+
    2022-10-18
  • Mysql全文索引
    1.背景简介 项目开发过程有时候会遇到全文检索的需求,但是数据量有时候比较小,不属于高并发高吞吐场景,这种场景搭建ES服务有点浪费资源,也把工程设计复杂了,所以需要采用更简单更廉价的方案。一般业务系统都会用到Mysql或者PostgreSQ...
    99+
    2023-08-18
    mysql 数据库 全文检索
  • mysql 全文索引
    停止词(stopword) ...
    99+
    2022-10-18
  • PHP学习笔记:搜索引擎与全文检索
    引言:搜索引擎和全文检索是现代Web开发中非常重要的功能。无论是电商网站、新闻门户还是博客网站,几乎所有的网站都需要提供快速准确的搜索功能,以便用户能够迅速找到所需要的信息。 在PHP中,我们可以借助一些强大的开源库来实现搜索引擎和全文检索...
    99+
    2023-10-21
    - PHP学习笔记 - 搜索引擎 - 全文检索
  • SQL Server中怎么查询全文检索
    本篇文章给大家分享的是有关SQL Server中怎么查询全文检索,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1. 改变文件存储时的文件名  ...
    99+
    2022-10-18
  • postgres 中文全文分词搜索实例
    Dockerfile # If you don‘t want to build it youself, you can try `docker pull killercai/postgres`. FROM healthcheck/postg...
    99+
    2019-06-25
    postgres 中文全文分词搜索实例
  • 全文搜索Sphinx怎么实现
    本篇内容介绍了“全文搜索Sphinx怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.Sphinx简介1.1.Sphinx是什么Sp...
    99+
    2023-06-04
  • win10如何全盘搜索文件
    在Windows 10中,您可以使用文件资源管理器来全盘搜索文件。以下是搜索文件的步骤:1. 打开文件资源管理器(可以使用快捷键Wi...
    99+
    2023-09-01
    win10
  • Java工程师怎么掌握全文搜索引擎
    这篇文章主要介绍“Java工程师怎么掌握全文搜索引擎”,在日常操作中,相信很多人在Java工程师怎么掌握全文搜索引擎问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java工程师怎么掌握全文搜索引擎”的疑惑有所...
    99+
    2023-06-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作