我需要构建一些产生排名结果的搜索逻辑。一个简单的例子是查询带有firstname,lastname和zip code列的表。所需的输出将是匹配的行的列表,按照匹配的“度”的顺序。
即顶部结果将是那些匹配所有三列的结果,其次是仅匹配两列的结果,然后是单列匹配。
对于多个查询并将结果组合在一起是否存在公认的偏好:全文索引?有什么我绝对不应该做的吗?
我很欣赏这一点都很模糊,与SO问题的具体性质略有不同,但我正在寻找有关采取方法的指导,而不是“做我的作业”类型问题: - )
(平台是SQL Server 2005)
答案 0 :(得分:1)
全文索引肯定会为您提供此功能 - 您可以使用CONTAINSTABLE
或FREETEXTTABLE
查询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;