按 LIKE 的匹配排序

ado*_*lot 8 sql-server order-by pattern-matching

我想知道如何实现 SQL 以获得按类似谓词的最佳匹配排序的结果。我在数据库中有 10 万篇文章,当用户按名称的一部分调用某些项目时。我想显示按查询的最佳匹配排序的结果。

我会试着用伪代码来描述

select 
*
from
articles
where item_nale like '%'+@user_input +'%'
order by "BEST MATCH"
Run Code Online (Sandbox Code Playgroud)

db2*_*db2 22

由于您的所有匹配项必须匹配 LIKE 模式才能被包含在内,因此要做的简单事情是假设您匹配的列的较短值是“更好”的匹配项,因为它们更接近于图案。

ORDER BY LEN(item_nale) ASC
Run Code Online (Sandbox Code Playgroud)

或者,您可以假设匹配模式较早出现的值是“更好的”匹配。

ORDER BY PATINDEX('%' + @user_input + '%', item_nale) ASC
Run Code Online (Sandbox Code Playgroud)

或者你可以将两者结合起来;首先寻找最早的匹配项,在这些匹配项中,更喜欢较短的值。

ORDER BY PATINDEX('%' + @user_input + '%', item_nale) ASC, LEN(item_nale) ASC
Run Code Online (Sandbox Code Playgroud)

它不像全文索引那样复杂,它只考虑单个列的匹配,但它提供了足够好的结果。


Mar*_*ith 12

无法计算与 LIKE 谓词的相关性。对于 SQL Server(我认为之前的问题是您的平台?),您需要查看支持按相关性对结果进行评分/排名的全文搜索