【SQL学习记录】SQL Server全文本搜索
1 全文本搜索 (Full-text Search)
1.1 全文本搜索简介
全文本搜索支持查询:
- 一个或多个特定单词
- 以特定的文本开头
- 特定单词的各种词性(动词、名词、形容词、进行时、过去时等)
- 和其他单词/短语临近的单词/短语
- 近义词
- 基于权重值的单词/短语
全文本搜索不区分大小写(not case-sensitive)
1.2 全文本搜索与LIKE通配符搜索的对比
- Like通配符搜索仅仅针对于符号模式(全文本搜索基于分词的结果查询)
- Like无法使用LIKE predicate 查询格式化的二进制数据?
- Like对于非结构化的本文数据比全文本搜索速度慢
搜索原理:
- LIKE:顺序扫描
- 全文检索:分词→查询索引→根据索引找到文档
1.3 全本文搜索的索引
1.3.1 全文索引的结构
• 全文本搜索基于全文索引(full-text index)
• 每个表只允许有一个全文索引,则表必须有一个唯一的非空列,可以选择多种数据类型
o 停用词处理
o Colld
o Docld : 标记出现在哪一行
o Occurrence:标记出现的顺序
o 若用户对原表进行更新,则会自动跟踪到更新的行并进行修改
1.3.2 全文索引的查询逻辑
1.3.3 全文索引的建立
• 只能针对表建立全文索引
• 一个全文目录(Catalog)可以包含多个全文索引,但一个全文索引只能用于构成一个全文目录
• 一个数据表只能创建一个全文索引,一个全文索引可以包含多个字段
• 创建全文索引的表必须有一个唯一的非空索引,并且这个唯一的非空索引只能是一个字段,不能是组合字段
• 可以对以下类型的列创建全文索引(char、varchar、nchar、nvarchar…)
全文索引的具体建立步骤:
- 检查服务器里是否存在带有Full-text字样的服务,并保持开启状态
- 新建全文目录,用于存储全文索引
1.4 全文本搜索的查询语句
• CONTAINS / FREETEXT
• CONTAINSTABLE / FREETEXTTABLE
【示例】
• 匹配单词/短语
o CONTAINS(列名, 包含的内容)
找出所有价格为80.99美元并包含单词“Mountain”的商品
SELECT Name, ListPrice
FROM Production.Product
WHERE ListPrice = 80.99 AND CONTAINS(Name, 'Mountain')
o CONTAINSTABLE
找出Description列中包含单词“aluminum”并与“light”和“lightweight”离得近的所有产品的ID与描述。仅返回排名为2或更高的列。
SELECT FT_TBL.ProductDescriptionID,
FT_TBL.Description, KEY_TBL.RANK
FROM Production.ProductDescription AS FT_TBL INNER JOIN CONTAINSTABLE (Production.ProductDescription, Description, '(light NEAR aluminum) OR (lightweight NEAR aluminum)' ) AS KEY_TBL ON FT_TBL.ProductDescriptionID = KEY_TBL.[KEY]
WHERE KEY_TBL.RANK > 2
ORDER BY KEY_TBL.RANK DESC;
• 匹配释义而非具体单词
o FREETEXT
找出所有包含与“vital safety components”有关的文档
SELECT Title
FROM Production.Document
WHERE FREETEXT (Document, 'vital safety components')
o FREETEXTTABLE
【使用说明】
• CONTAINS 和 FREETEXT
- 用法:where和having子句中
- 结果:返回布尔值
- 指定搜索表中的列
• CONTAINSTABLE和FREETEXTTABLE
- 用法:在select和from中使用
- 需要指定搜索的基表
- 必须将结果与基表连接,所以必须知道唯一键的列名
【搜索示例】
• 寻找具体单词or短语
o
• 前缀查询
o
• Inflectional forms of a specific word
o
• Synonyms of a specific word
• 位置临近的单词
• 权重值查询
o
• 使用逻辑语句
• 其他
o 大小写区分
o 停用词
o 语言(正确的分词器、词干分析器)
o 词库
【SQL学习记录】SQL Server全文本搜索相关推荐
- mysql 学习记录 全文本搜索
第十八章 全文本搜索 mysql最常用的引擎是MYISAM和InnoDb,前者支持全文本搜索,后者不支持. 全文本搜索搜索速度更快,搜索条件更精确,搜索结果更智能化.使用like子句也可以完成,但全文 ...
- 《MySQL必知必会》学习笔记——组合查询、全文本搜索
文章目录 第17章 组合查询 1. 创建组合查询 2. UNION规则 3. 包含或取消重复的行 4. 对组合查询结果排序 第18章 全文本搜索 1. 理解全文本搜索 2. 使用全文本搜索 2.1 启 ...
- MySql学习之组合查询(UNION)和全文本搜索(Match()和Against())
组合查询 一.何为组合查询? 组合查询的目的就是利用UNION操作符将多条SELECT语句的查询结果组合成一个结果集,供我们使用. 有两种基本情况下需要使用组合查询: 1.在单个查询中从不同的表返回类 ...
- MySQL学习笔记:全文本搜索
本文为本人学习书籍<MySQL必知必会>笔记系列,欢迎持续关注,有问题随时留言评论,一起探讨学习~ 18 全文本搜索 并非所有搜索引擎都支持全文搜索.最常用的两个搜索引擎MyISAM(支持 ...
- 数据库9:联结表 高级联结 组合查询 全文本搜索
第十五章联结表 Sql最强大的功能之一就是能在数据检索查询的执行中联结(join)表.联结是利用sql的select能执行的最重要的操作,能很好的理解联结及其语法是学习sql的一个极为重要的组成部分. ...
- MySQL(十)操纵表及全文本搜索
一.创建表 MySQL不仅用于表数据操作,还可以用来执行数据库和表的所有操作,包括表本身的创建和处理. 创建表一般有如下两种方式: ①使用具有交互式创建和管理表的工具: ②直接使用MySQL语句操纵表 ...
- MySQL数据检索+查询+全文本搜索
[0]README 0.1)本文部分文字描述转自"MySQL 必知必会",旨在review"MySQL数据检索+查询+全文本搜索" 的基础知识: [1]使用子查 ...
- mysql全文本搜索
前言 1️⃣ :mysql环境准备 2️⃣ :简单的表查询 3️⃣ :通配符+正则表达式 4️⃣ :mysql函数与分组 5️⃣ :子查询_联结查询_组合查询 第一部分:我们准备环境:安装数据库+创建 ...
- MySQL-18全文本搜索-必知必会
MyISAM引擎支持全文本搜索,InnoDB不支持全文本搜索. 之前学习的通配符和正则表达式匹配通常需要MySQL尝试匹配表中的所有行,非常耗时:很难控制匹配什么和不匹配什么:不能提供一种智能化的选择 ...
最新文章
- 道家遁甲式(又名道家奇门)
- 一键进入dfu模式软件_dfu模式是什么 dfu模式介绍及进入方法【详解】
- html如何让左右字段不能编辑,HTML中让表单input等文本框为只读不可编辑的方法...
- TCP和UDP的优缺点及区别
- 炼丹神器!模型调参这门“玄学”,终于被破解了
- java wait方法_java wait方法
- 读《JavaScript dom编程艺术(第2版)》笔记 1-2
- 02 socketserver客户端
- struts2——快速入门
- R-CNN算法学习(步骤二:特征提取)
- c语言语法 英语,英语干货:英语语法基础知识大全
- 考出PMP证书到底有没有用?
- C语言 有两个矩形 求重叠面积,计算两个矩形重叠面积的简单方法
- ajax异步请求中途取消
- 浅谈 Android 的安全启动和完整性保护
- eclipse的安装和汉化
- WAS上配置数据源连接失败
- 安装prometheus遇到:Failed to execute operation:file existed解决办法
- 编写ESM风格的nodejs应用
- 微服务架构,这一篇就够了!
热门文章
- 【智能金融】机器学习在风控领域的应用
- 云主机和服务器的区别?
- jQuery中的append()和appendTo()
- Shell cut分割
- Wireshark抓取RTP流中的语音文件到本地
- 简易版的飞机大战(C语言)
- 面对即将来临的995,京东员工明确表示难受了……
- php - 超详细将 pdf 文档格式转换为图片格式,将 offce pdf 演示文稿转成图像 png / jpg(小白一看就懂的详细教程,附带完整示例源代码)
- 运用EasyUI+ASP.Net MVC+C#研发公务车管理与监控系统(一)
- Alpha matting算法发展