广告
返回顶部
首页 > 资讯 > 数据库 >SQL Server中怎么实现全文搜索功能
  • 190
分享到

SQL Server中怎么实现全文搜索功能

2024-04-02 19:04:59 190人浏览 独家记忆
摘要

这期内容当中小编将会给大家带来有关SQL Server中怎么实现全文搜索功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一,创建全文目录和唯一索引创建全文索引之前,必须

这期内容当中小编将会给大家带来有关SQL Server中怎么实现全文搜索功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

一,创建全文目录和唯一索引

创建全文索引之前,必须创建全文目录(Full-Text Catalog),全文目录用于组织全文索引,是全文索引的容器。每一个全文索引必须属于一个全文目录。全文目录是个逻辑结构,跟数据库架构(Schema)相同,根据全文索引的存储位置无关。

create fulltext catalog catalog_testas default;

为了创建全文索引,基础表上必须存在一个唯一的(unique)、单列的(single-column)、非空的(non-nullable)的索引,全文引擎使用该索引把基础表上的每行数据映射唯一索引键上,倒转索引存储的就是该索引键和分词之间的映射关系。

create unique index uidx_dbLogID on [dbo].[DatabaseLog]([DatabaseLogID]);

二,创建全文索引

每个表只能创建一个全文索引,创建全文索引时,必须考虑全文索引存储的文件组,全文索引关联的停用词列表,全文索引的更新方式,以及跟文本关联的语言,全文索引列必须是文本字段,例如:

create fulltext index on [dbo].[DatabaseLog]([tsql] language 1033)key index ui_dbLogIDon (catalog_test,filegroup [primary]) with(change_tracking=off ,no population ,stoplist=system);

1,语言(language)

选项 language 是可选的,用于指定列级别的语言,该选项的值可以是语言的名称或LCID,如果没有指定language选项,那么使用SQL Server实例的默认语言。从系统视图 sys.fulltext_languages (Transact-SQL)中查看系统支持的语言及其对应的LCID 和名称。

2,全文目录(fulltext_catalog)

选项fulltext_catalog_name 用于指定全文索引的分组,

3,文件组(filegroup)

选项 filegroup filegroup_name 用于指定全文索引存储的文件组,如果没有指定文件组,那么全文索引和基础表存储在相同的文件组中。由于更新全文索引是IO密集型操作,因此,为了更快的更新全文索引,最好把全文索引存储在不同于基础表的的物理硬盘或文件组上,以达到最大的IO并发

4,填充全文索引的方式

和普通的索引相同,当基础表数据更新时,全文索引必须自动更新,这是系统默认的行为,也可以配置手动更新全文索引,或者间隔特定的时间点自动更新全文索引。

选项CHANGE_TRACKING 用于指定跟全文索引列相关的数据更新(Update,Delete,或Insert)是否需要同步到全文索引,•CHANGE_TRACKING = MANUAL :手动更新•CHANGE_TRACKING =AUTO:自动更新,默认设置,当基础表数据变化时,全文索引自动更新,•CHANGE_TRACKING =OFF , NO POPULATION:不更新,指定选项NO POPULATION,表明在创建全文索引之后,SQL Server不会更新(populate)全文索引;如果未指定选项NO POPULATION,在创建全文索引之后,SQL Server更新全文索引。

5,停用词(STOPLIST)

停用词(StopWord)也称作噪音词,每一个全文索引都会关联一个停用词列表,默认情况下,全文索引关联的是系统停用词(system stoplist)。全文引擎把停用词从分词中删除,使全文索引不会包含停用词。

STOPLIST [ = ] { OFF | SYSTEM | stoplist_name }

三,填充全文索引

填充全文索引也叫做爬虫(crawl)进程,或填充(Population)进程。由于创建或填充全文索引会消耗大量的系统(IO、内存)资源,因此尽量选择在系统空闲时对全文索引进行填充。在创建全文索引时,通过指定选项 CHANGE_TRACKING= MANUAL,或 CHANGE_TRACKING= OFF, NO POPULATION,新建的全文索引不会立即填充,用户可以选择在系统空闲时,使用 alter fulltext index 语句执行填充操作。只有填充全文索引之后,全文索引才包含基础表的分词数据。

alter fulltext index on table_namestart { full | incremental | update } population;

更新全文索引有三种方式:

•FULL POPULATION:全部填充,从基础表中获取每一行,重新编入全文索引;•INCREMENTAL POPULATION:增量填充,前提是基础表中包含timestamp字段,从上一次填充之后,只把更新之后的数据编入全文索引;•UPDATE POPULATION:更新填充,从上一次填充之后执行更新(insert、update、或delete)操作的数据行重新编入索引;

在创建全文索引时,如果指定CHANGE_TRACKING=AUTO 或 CHANGE_TRACKING= OFF , 那么新建的全文索引会立即开始填充进程。

四,使用 contains 谓词查询全文索引

如果想要在查询中使用全文索引,通常使用CONTaiNS谓词来调用全文索引,实现比LIKE关键字更复杂的文本匹配查询,而LIKE关键字是模糊匹配,不会调用全文索引。

例如,利用contains谓词执行单个分词的完全匹配查询:

select [tsql] from [dbo].[DatabaseLog] where contains([tsql], 'searchword', language 1033);

全文查询跟Like相比,速度更快,支持的搜索功能更复杂,使用contains谓词,不仅能够执行分词的完全匹配或分词的前缀匹配查询,还能够执行基于词根的查询,基于自定义同义词的查询,基于距离和顺序的相邻分词查询。但是,和Like 相比,contains谓词不能进行后缀匹配查询。

contains谓词返回的结果是布尔值,如果全文索引列中包含指定的关键字或查找模式(pattern),返回TRUE;否则,返回FALSE。

contains谓词支持word查询和短语查询,word是指单个分词,短语(phrase)是由多个word和间隔的空格组成的,对于短语,必须使用双引号,将多个word组成一个短语。

1,逻辑组合查询

使用and ,and not, 或 or 逻辑运算符 匹配多个word 或 多个phrase

CONTAINS(Name, '"Mountain" OR "Road" ')CONTAINS(Name, ' Mountain OR Road ')

2,前缀查询

使用contains谓词进行前缀匹配,和like 'prefix%'功能相同,只不过contains谓词使用“*”作为通配符,“*”匹配0,1或多个字符,前缀匹配的写法是:'"prefix*"',全文索引只能执行前缀匹配。

CONTAINS(Name, ' "Chain*" ')CONTAINS(Name, '"chain*" OR "full*"')

3,查询同义词(thesaurus)或词干(stemmer)

Stemmer(词干),例如,根据语法规程,英语的动词 根据数(单数,复数),人称,时态的不同而存在不同的变化形式,这些单词都是同源的。

CONTAINS(Description, ' FORMSOF (INFLECTIONAL, ride) ')

THESAURUS (同义词),需要导入XML进行配置,SQL Server 提供一个默认的Thesaurus file,是Empty的。如果在Thesaurus file 配置“Author”,“Writer”,“journalist” 是同义词,在使用fulltext index查询时,只要满足任意一个同义词,都匹配成功。

CONTAINS(Description, ' FORMSOF (THESAURUS, author) ')

4,距离查询

使用 near 函数,查询匹配相邻分词的数据行,near函数的定义如下,用于需要在查询模式中指定距离查询的查询模式:

NEAR ( ( { <simple_term> | <prefix_term> } [ ,…n ] ) [, <maximum_distance> ] [, <match_order> ] )

例如:使用Near 函数指定相邻分词的距离和匹配顺序,near((term1,term2,term3),5)表示任意两个term之间的距离不能超过5, near((term1,term2,term3),5,true),表示任意两个term的距离不能超过5,并且按照 term1,term2,term3的顺序存在于字符串中。

--regardless of the intervening distance and regardless of orderCONTAINS(column_name, 'NEAR(term1,"term3 term4")')--searches for "AA" and "BB", in either order, within a maximum distance of fiveCONTAINS(column_name, 'NEAR((AA,BB),5)')--in the specified order with regardless of the distanceCONTAINS(column_name, 'NEAR ((Monday, Tuesday, Wednesday), MAX, TRUE)')

对于 near((term1,term2,term3),5,true),term1 和 term5之间最多存在5个term,不包括内部的搜索分词,“term2”,例如:

CONTAINS(column_name, 'NEAR((AA,BB,CC),5)')

这个查询会匹配下面的文本,注意,内部的搜索分词CC没有计算距离:

BB one two CC three four five AA

例如,在原文本中,分词bike和control的最大距离不能超过10,分词bike必须出现在分词control的前面:

CONTAINS(Comments , 'NEAR((bike,control), 10, TRUE)')

SQL Server提供的全文搜索功能,比LIKE关键字丰富,具备初级的全文搜索功能,速度快,维护简单,缺点是,全文搜索功能非常有限,在实际的开发中,可以配合开源的全文搜索引擎,例如,Solr,elasticsearch等来开发功能更强大的全文搜索功能。

上述就是小编为大家分享的SQL Server中怎么实现全文搜索功能了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网数据库频道。

您可能感兴趣的文档:

--结束END--

本文标题: SQL Server中怎么实现全文搜索功能

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

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

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

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

下载Word文档
猜你喜欢
  • SQL Server中怎么实现全文搜索功能
    这期内容当中小编将会给大家带来有关SQL Server中怎么实现全文搜索功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一,创建全文目录和唯一索引创建全文索引之前,必须...
    99+
    2022-10-18
  • 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的全文搜索功能怎么用
    本文小编为大家详细介绍“SQL Server的全文搜索功能怎么用”,内容详细,步骤清晰,细节处理妥当,希望这篇“SQL Server的全文搜索功能怎么用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知...
    99+
    2023-06-30
  • SQL Server全文搜索功能的示例分析
    这篇文章主要为大家展示了“SQL Server全文搜索功能的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“SQL Server全文搜索功能的示例分析”这...
    99+
    2022-10-18
  • 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实现全文搜索查询详解
    目录一、概述二、全文搜索查询三、将全文搜索查询与 LIKE 谓词进行比较四、全文搜索体系结构4.1、SQL Server 进程4.2、过滤器守护程序主机进程五、全文搜索处理5.1、全...
    99+
    2023-05-14
    SQL Server全文搜索 SQL全文搜索查询
  • SQL Server中怎么实现全文索引服务
    SQL Server中怎么实现全文索引服务,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。SQL7的全文检索和IndexServer的检索方式非...
    99+
    2022-10-18
  • java怎么实现搜索框搜索功能
    要实现搜索框搜索功能,可以按照以下步骤进行:1. 在前端页面上创建一个搜索框,如一个文本框和一个按钮。2. 在后端创建一个处理搜索请...
    99+
    2023-09-26
    java
  • Mongodb实战之全文搜索功能
    前言 众所周知在传统的关系型数据库中,我们通常将数据结构化,通过一系列表关联、聚合来查询我们所需的结果。而在非结构化的数据中,缺少这种预定义的结构,因而如何快速查询定位到我们所需要的结果,不是一件容易的事。...
    99+
    2022-10-18
  • SQL Server中怎么查询全文检索
    本篇文章给大家分享的是有关SQL Server中怎么查询全文检索,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1. 改变文件存储时的文件名  ...
    99+
    2022-10-18
  • JavaScript中怎么实现全文搜索
    这篇文章将为大家详细讲解有关JavaScript中怎么实现全文搜索,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。相关性对每一个搜索查询,我们很容易给每个文档...
    99+
    2022-10-19
  • 全文搜索Sphinx怎么实现
    本篇内容介绍了“全文搜索Sphinx怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.Sphinx简介1.1.Sphinx是什么Sp...
    99+
    2023-06-04
  • android怎么实现搜索功能
    要实现Android应用的搜索功能,你可以按照以下步骤进行操作: 创建一个搜索框:在你的布局文件中添加一个EditText或Se...
    99+
    2023-10-26
    android
  • SQL Server中怎么实现复制功能
    今天就跟大家聊聊有关SQL Server中怎么实现复制功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。但我觉得这个功能用来设置备份服务器或测试服务...
    99+
    2022-10-18
  • Android中怎么实现poi搜索功能
    Android中怎么实现poi搜索功能,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。第一,就是设置背景的drawable为纯白色导致键盘弹出的时候,recyclerview...
    99+
    2023-05-30
    android
  • Sphinx PHP 实现全文搜索的搜索历史记录与推荐功能
    引言:随着互联网的快速发展,全文搜索已经成为了许多网站和应用程序中必不可少的功能。Sphinx是一个功能强大的开源全文搜索引擎,它可以快速地搜索和检索大量的文本数据。本文将介绍如何使用Sphinx PHP来实现全文搜索的搜索历史记录与推荐功...
    99+
    2023-10-21
    PHP (编程语言) Sphinx (用于全文搜索)
  • SQL Server中怎么实现时间戳功能
    SQL Server中怎么实现时间戳功能,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1.基本概念时间戳:数据库中自动生成的唯...
    99+
    2022-10-18
  • web用php怎么实现搜索功能
    PHP是一种广泛应用于Web开发中的服务器端脚本语言,它拥有强大的功能和灵活性,能够实现多种复杂的功能。其中,搜索功能无疑是用户最常用的功能之一,于是本文将介绍如何用PHP实现Web搜索功能。创建搜索表单在网站主页面上添加一个搜索表单,通常...
    99+
    2023-05-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作