[英]SQL function to determine the most accurate result
如果我有这样的桌子...
create table #words (
id int identity,
word varchar(1024)
)
insert into #words (word) values ('dock')
insert into #words (word) values ('dockable')
我做一个喜欢的查询
select id, word from #words where word like '%dock%'
有没有办法判断哪个结果最准确?
对于复杂的多词标准,您应该使用全文搜索和CONTAINSTABLE
。 该表函数的输出包含一个RANK
列:
由
CONTAINSTABLE
生成的表包括名为RANK
的列。RANK
列是每行的值(从0到1000),指示行与选择标准的匹配程度。 通常在SELECT
语句中以下列方式之一使用此等级值:
- 在
ORDER BY
子句中,将排名最高的行作为表中的第一行。- 在选择列表中查看分配给每一行的等级值。
对于简单的单个单词标准,您应该在SQL CLR中实现一个Levenshtein距离函数,并使用该函数查找最相似的最佳匹配单词(或使用Ken Redler的链接项目中的那个)。
您可以尝试使用相似性指标来获得与搜索字符串相比每个结果的距离得分。 SOUNDEX
等为您提供了一些原始选择,但是根据您的要求,还有更多更复杂的选择。 SimMetrics函数库允许您按汉明距离,Levenshtein距离等比较字符串。这是一篇详尽的文章,介绍了该库的安装和用法。
您可以使用SOUNDEX和DIFFERENCE T-SQL函数比较单词,但是您可能仍需要一种方法来确定哪个“最准确”。
例如,运行以下查询:
SELECT DIFFERENCE('dock','dock');
SELECT DIFFERENCE('dock','dockable');
'dock'和'dock'之差为4,这是最好的结果; 'dock'和'docakble'是2,这是一个更高的差异。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.