我刚刚读了一篇用SQL写的关于“全文搜索”的文章。
我只是想知道FTS和LIKE有什么不同。我确实读了几篇文章,但找不到任何能很好地解释它的东西。
发布于 2008-10-22 07:08:04
一般来说,在“精确度”和“召回率”之间存在权衡。高精度意味着呈现更少的不相关结果(没有假阳性),而高召回率意味着缺少更少的相关结果(没有假阴性)。使用LIKE操作符可以为您提供100%的精确度,并且在召回方面没有任何让步。全文搜索工具为您提供了很大的灵活性,可以调低精度以提高查全率。
大多数全文搜索实现都使用“倒排索引”。这是一个索引,其中关键字是单个术语,关联值是包含该术语的记录集。全文搜索被优化以计算这些记录集的交集、并集等,并且通常提供排名算法来量化给定记录与搜索关键字的匹配程度。
SQL LIKE操作符的效率可能非常低。如果将其应用于未编制索引的列,则将使用完全扫描来查找匹配项(就像对未编制索引的字段的任何查询一样)。如果对列进行了索引,则可以对索引键执行匹配,但效率远远低于大多数索引查找。在最坏的情况下,LIKE模式将具有需要检查每个索引键的前导通配符。相比之下,许多信息检索系统可以通过预编译选定字段中的后缀树来支持前导通配符。
全文搜索的其他典型功能包括
鼠标词法分析或标记化-将一块非结构化文本分解为单独的单词、短语和特殊的tokens
匹配记录的相似性
发布于 2008-10-22 07:04:45
FTS涉及对文本字段中的单个单词进行索引,以便快速搜索多条记录。使用LIKE仍然需要在字段中进行字符串搜索(线性或类似的)。
发布于 2016-03-03 15:04:29
MySQL从启用的全文搜索列中的单词创建索引,并对该索引执行搜索。MySQL使用一种复杂的算法来确定与搜索查询匹配的行。
另外,来自this SO answer
全文搜索有几个优点。
索引:
类似于:
Foo LIKE '%Bar';
无法利用索引。它必须查看每一行,并查看是否匹配。然而,全文索引可以。事实上,全文索引可以在匹配单词的顺序、这些单词在一起的距离等方面提供更多的灵活性。
词干分析:
全文搜索可以搜索词干。如果你搜索run,你可以得到"ran“或"running”的结果。大多数全文引擎都有各种语言的词干字典。
加权结果:
全文索引可以包含多个列。例如,您可以搜索“桃派”,索引可以包括标题、关键字和正文。与标题匹配的结果可以加权更高,相关性更高,并且可以排序以显示在顶部附近。
Disadvantages:
全文索引可能很大,比标准B树索引大很多倍。出于这个原因,许多提供数据库实例的托管提供商禁用了这一功能,或者至少对其收取额外费用。例如,据我所知,Windows Azure不支持全文查询。
全文索引的更新速度也可能较慢。如果数据更改很多,那么与标准索引相比,更新索引可能会有一些滞后。
https://stackoverflow.com/questions/224714
复制相似问题