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

时间:2009-10-23 14:42:26

标签: sql sql-server sql-server-2005

我需要构建一些产生排名结果的搜索逻辑。一个简单的例子是查询带有firstname,lastname和zip code列的表。所需的输出将是匹配的行的列表,按照匹配的“度”的顺序。

即顶部结果将是那些匹配所有三列的结果,其次是仅匹配两列的结果,然后是单列匹配。

对于多个查询并将结果组合在一起是否存在公认的偏好:全文索引?有什么我绝对不应该做的吗?

我很欣赏这一点都很模糊,与SO问题的具体性质略有不同,但我正在寻找有关采取方法的指导,而不是“做我的作业”类型问题: - )

(平台是SQL Server 2005)

2 个答案:

答案 0 :(得分:1)

全文索引肯定会为您提供此功能 - 您可以使用CONTAINSTABLEFREETEXTTABLE查询FTS(全文服务器),并获取可能匹配的列表,包括其排名/相关性。

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

作为一个很好的起点。

马克

答案 1 :(得分:0)

这是一个与您匹配的快速sql解决方案。创建此功能后,您可以 ORDER BY dbo.func_getWeightByColumn(@firstname, firstname, @lastname, 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;