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…)
全文索引的具体建立步骤:

  1. 检查服务器里是否存在带有Full-text字样的服务,并保持开启状态
  2. 新建全文目录,用于存储全文索引
    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全文本搜索相关推荐

  1. mysql 学习记录 全文本搜索

    第十八章 全文本搜索 mysql最常用的引擎是MYISAM和InnoDb,前者支持全文本搜索,后者不支持. 全文本搜索搜索速度更快,搜索条件更精确,搜索结果更智能化.使用like子句也可以完成,但全文 ...

  2. 《MySQL必知必会》学习笔记——组合查询、全文本搜索

    文章目录 第17章 组合查询 1. 创建组合查询 2. UNION规则 3. 包含或取消重复的行 4. 对组合查询结果排序 第18章 全文本搜索 1. 理解全文本搜索 2. 使用全文本搜索 2.1 启 ...

  3. MySql学习之组合查询(UNION)和全文本搜索(Match()和Against())

    组合查询 一.何为组合查询? 组合查询的目的就是利用UNION操作符将多条SELECT语句的查询结果组合成一个结果集,供我们使用. 有两种基本情况下需要使用组合查询: 1.在单个查询中从不同的表返回类 ...

  4. MySQL学习笔记:全文本搜索

    本文为本人学习书籍<MySQL必知必会>笔记系列,欢迎持续关注,有问题随时留言评论,一起探讨学习~ 18 全文本搜索 并非所有搜索引擎都支持全文搜索.最常用的两个搜索引擎MyISAM(支持 ...

  5. 数据库9:联结表 高级联结 组合查询 全文本搜索

    第十五章联结表 Sql最强大的功能之一就是能在数据检索查询的执行中联结(join)表.联结是利用sql的select能执行的最重要的操作,能很好的理解联结及其语法是学习sql的一个极为重要的组成部分. ...

  6. MySQL(十)操纵表及全文本搜索

    一.创建表 MySQL不仅用于表数据操作,还可以用来执行数据库和表的所有操作,包括表本身的创建和处理. 创建表一般有如下两种方式: ①使用具有交互式创建和管理表的工具: ②直接使用MySQL语句操纵表 ...

  7. MySQL数据检索+查询+全文本搜索

    [0]README 0.1)本文部分文字描述转自"MySQL 必知必会",旨在review"MySQL数据检索+查询+全文本搜索" 的基础知识: [1]使用子查 ...

  8. mysql全文本搜索

    前言 1️⃣ :mysql环境准备 2️⃣ :简单的表查询 3️⃣ :通配符+正则表达式 4️⃣ :mysql函数与分组 5️⃣ :子查询_联结查询_组合查询 第一部分:我们准备环境:安装数据库+创建 ...

  9. MySQL-18全文本搜索-必知必会

    MyISAM引擎支持全文本搜索,InnoDB不支持全文本搜索. 之前学习的通配符和正则表达式匹配通常需要MySQL尝试匹配表中的所有行,非常耗时:很难控制匹配什么和不匹配什么:不能提供一种智能化的选择 ...

最新文章

  1. 道家遁甲式(又名道家奇门)
  2. 一键进入dfu模式软件_dfu模式是什么 dfu模式介绍及进入方法【详解】
  3. html如何让左右字段不能编辑,HTML中让表单input等文本框为只读不可编辑的方法...
  4. TCP和UDP的优缺点及区别
  5. 炼丹神器!模型调参这门“玄学”,终于被破解了
  6. java wait方法_java wait方法
  7. 读《JavaScript dom编程艺术(第2版)》笔记 1-2
  8. 02 socketserver客户端
  9. struts2——快速入门
  10. R-CNN算法学习(步骤二:特征提取)
  11. c语言语法 英语,英语干货:英语语法基础知识大全
  12. 考出PMP证书到底有没有用?
  13. C语言 有两个矩形 求重叠面积,计算两个矩形重叠面积的简单方法
  14. ajax异步请求中途取消
  15. 浅谈 Android 的安全启动和完整性保护
  16. eclipse的安装和汉化
  17. WAS上配置数据源连接失败
  18. 安装prometheus遇到:Failed to execute operation:file existed解决办法
  19. 编写ESM风格的nodejs应用
  20. 微服务架构,这一篇就够了!

热门文章

  1. 【智能金融】机器学习在风控领域的应用
  2. 云主机和服务器的区别?
  3. jQuery中的append()和appendTo()
  4. Shell cut分割
  5. Wireshark抓取RTP流中的语音文件到本地
  6. 简易版的飞机大战(C语言)
  7. 面对即将来临的995,京东员工明确表示难受了……
  8. php - 超详细将 pdf 文档格式转换为图片格式,将 offce pdf 演示文稿转成图像 png / jpg(小白一看就懂的详细教程,附带完整示例源代码)
  9. 运用EasyUI+ASP.Net MVC+C#研发公务车管理与监控系统(一)
  10. Alpha matting算法发展