如果我有这样的桌子......
create table #words (
id int identity,
word varchar(1024)
)
insert into #words (word) values ('dock')
insert into #words (word) values ('dockable')
我做了一个LIKE查询
select id, word from #words where word like '%dock%'
有没有办法告诉哪个结果最准确?
答案 0 :(得分:4)
对于复杂的多字标准,您应使用全文搜索和CONTAINSTABLE
。此表函数的输出包含RANK
列:
CONTAINSTABLE
生成的表格 包括一个名为RANK
的列。RANK
列是一个值(从0到 1000)每行表示如何 一行符合选择标准。 该等级值通常用于SELECT
中的其中一种方式 语句:
- 在
ORDER BY
子句中返回排名最高的行作为第一行 在表中。- 在选择列表中查看分配给每一行的排名值。
对于简单的单字标准,您应该在SQL CLR中实现Levenshtein distance函数,并使用它来查找最相似的最佳匹配单词(或使用Ken Redler的链接项目中的单词)。
答案 1 :(得分:2)
与搜索字符串相比,您可以尝试使用相似性指标来获取每个结果的距离分数。 SOUNDEX
等为您提供了一些原始选项,但根据您的要求,还有更复杂的选择。 SimMetrics library of functions允许您通过汉明距离,Levenshtein距离等比较字符串。这是一个描述库的安装和使用的thorough article。
答案 2 :(得分:1)
您可以使用SOUNDEX and DIFFERENCE T-SQL函数来比较单词,但您可能仍需要一种方法来确定哪种“最准确”。
例如,运行以下查询:
SELECT DIFFERENCE('dock','dock');
SELECT DIFFERENCE('dock','dockable');
'dock'和'dock'的区别是4,这是最好的结果; 'dock'和'docakble'是2,这是一个更大的差异。
答案 3 :(得分:1)