sql - 什么是全文搜索与 LIKE

标签 sql full-text-search sql-like

我刚刚读了一篇文章,提到了 SQL 中的“全文搜索”。

我只是想知道 FTS 和 LIKE 之间有什么区别。我确实读过几篇文章,但找不到任何可以很好解释的内容。

最佳答案

一般来说,“精确度”和“召回率”之间需要权衡。高精度意味着呈现的不相关结果较少(无误报),而高召回率意味着缺失的相关结果较少(无误报)。使用 LIKE 运算符可为您提供 100% 的精确度,并且不会影响召回率。全文搜索工具为您提供了很大的灵 active ,可以降低精度以获得更好的召回率。

大多数全文搜索实现都使用“倒排索引”。这是一个索引,其中键是单个术语,关联值是包含该术语的记录集。全文搜索经过优化以计算这些记录集的交集、并集等,并且通常提供排名算法来量化给定记录与搜索关键字的匹配程度。

SQL LIKE 运算符的效率可能非常低。如果将其应用于未索引的列,则将使用完整扫描来查找匹配项(就像对未索引字段的任何查询一样)。如果列已建立索引,则可以针对索引键执行匹配,但效率远低于大多数索引查找。在最坏的情况下,LIKE 模式将具有前导通配符,需要检查每个索引键。相比之下,许多信息检索系统可以通过在选定字段中预编译后缀树来支持前导通配符。

全文搜索的其他典型功能是

  • 词法分析或标记化——打破 非结构化文本 block 个别单词、短语和 特殊标记
  • 形态学 分析,或词干——折叠变异 将给定单词放入一个索引项中; 例如,治疗“老鼠”和 “鼠标”或“电气化”以及 “电”作为同一个词
  • 排名——衡量 匹配记录的相似度 查询字符串

关于sql - 什么是全文搜索与 LIKE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/224714/

相关文章:

mysql 全文搜索不适用于某些关键字

mysql - INDEX Mysql for 字符串

VB.NET Like 运算符与小于登录模式的混淆

IF 中的 MySQL 计数

mysql - 导入到 Rapidminer 时格式化向量

sql - 有没有办法从 MySQL 的正则表达式中提取子匹配项?

mysql - PDO MySQL 查询在 LIKE 子句中使用撇号

java - 如何解决 java.sql.SQLException : Column count doesn't match value count at row 1 why?

php - 使用 Sphinx 和 PHP 按部分字符串搜索结果

mysql : how do you select blog body that has just an image no text?