当前位置:   article > 正文

【SQL学习记录】SQL Server全文本搜索_全文本搜索 full-text search

全文本搜索 full-text search
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')  
  • 1
  • 2
  • 3
  • 4

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;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

• 匹配释义而非具体单词
o FREETEXT
 找出所有包含与“vital safety components”有关的文档

SELECT Title  
FROM Production.Document  
WHERE FREETEXT (Document, 'vital safety components')  
  • 1
  • 2
  • 3

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 词库
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/168486
推荐阅读
相关标签
  

闽ICP备14008679号