生成排序SQL结果的首选方法?

生成排序SQL结果的首选方法?,sql,sql-server,sql-server-2005,Sql,Sql Server,Sql Server 2005,我需要建立一些搜索逻辑来生成排名结果。一个简单的例子是查询具有firstname、lastname和zip code列的表。所需的输出将是一个列表,其中列出了匹配的行,按匹配的“程度”排序 也就是说,最重要的结果是在所有三列上匹配的结果,然后是仅在两列上匹配的结果,然后是单列匹配的结果 与多个查询和合并结果相比,是否存在公认的全文索引偏好?有什么我绝对不应该做的吗 我理解这一切都相当模糊,与SO问题的具体性质略有出入,但我正在寻找关于采取的方法的指导,而不是“做我的家庭作业”类型的问题:-) (

我需要建立一些搜索逻辑来生成排名结果。一个简单的例子是查询具有firstname、lastname和zip code列的表。所需的输出将是一个列表,其中列出了匹配的行,按匹配的“程度”排序

也就是说,最重要的结果是在所有三列上匹配的结果,然后是仅在两列上匹配的结果,然后是单列匹配的结果

与多个查询和合并结果相比,是否存在公认的全文索引偏好?有什么我绝对不应该做的吗

我理解这一切都相当模糊,与SO问题的具体性质略有出入,但我正在寻找关于采取的方法的指导,而不是“做我的家庭作业”类型的问题:-)


(平台是SQL Server 2005)

全文索引肯定会给你这个-你可以使用
CONTAINSTABLE
FREETEXTTABLE
查询FTS(全文服务器),并获得可能匹配的列表,包括它们的排名/相关性

在Simple Talk上查看SQL Server全文搜索的优秀介绍文章:

作为一个良好的起点


Marc

这里有一个与您的问题相匹配的快速sql解决方案。创建此函数后,您可以
ORDER BY dbo.func_getWeightByColumn(@firstname,firstname,lastname,@zipcode,zipcode)DESC

CREATE FUNCTION [dbo].[func_getWeightByColumn] 
(
 @p1a varchar(50),
 @p1b  varchar(50),
 @p2a varchar(50) = 'a',
 @p2b  varchar(50) = 'b',
 @p3a varchar(50) = 'a',
 @p3b  varchar(50) = 'b',
)
RETURNS int
AS
BEGIN
 DECLARE @Result int
 SET @Result = 0

 IF @p1a = @p1b 
 BEGIN
  SET @Result = @Result + 1
 END

 IF @p2a = @p2b 
 BEGIN
  SET @Result = @Result + 1
 END

 IF @p3a = @p3b 
 BEGIN
  SET @Result = @Result + 1
 END

 RETURN @Result
END;

很好,谢谢你的链接。我以前读过第一篇,但没有读第二篇。。我现在就开始读吧!现在这是一个我甚至没有考虑过的方法!谢谢