目标:如果可能,根据对 3 个不同列的搜索返回结果,每个列都有自己的搜索字符串值和排序依据RANK
。
规则:
- 允许搜索任何列
- 结果必须包含各自列上的所有搜索字符串,除非
null
通过 - 如果所有搜索字符串都是
null
,则返回空结果
当前存储过程:
为了遵守上述规则,我经过大量研究后能够提出这一点。
ALTER PROCEDURE [Application].[usp_Institution_Search]
@RowCount INT = 100,
@Name NVARCHAR(255),
@City NVARCHAR(255),
@Country NVARCHAR(255)
AS
BEGIN
SET NOCOUNT ON;
IF ISNULL(@Name, '') = '' SET @Name = '""'
IF ISNULL(@City, '') = '' SET @City = '""'
IF ISNULL(@Country, '') = '' SET @Country = '""'
SELECT TOP (@RowCount)
[i].*
FROM
[dbo].[Institutions] [i]
WHERE
((NULLIF(@Name, '""') IS NULL OR FREETEXT([i].[InstitutionName], @Name))
AND (NULLIF(@City, '""') IS NULL OR FREETEXT([i].[City], @City))
AND (NULLIF(@Country, '""') IS NULL OR FREETEXT([i].[Country], @Country))
AND
(
NULLIF(@Name, '""') IS NOT NULL
OR NULLIF(@City, '""') IS NOT NULL
OR NULLIF(@Country, '""') IS NOT NULL)
)
END
问题:我正要订购结果,InstitutionName
但后来我考虑使用 aRANK
代替。经过更多研究,我发现最好使用FREETEXTTABLE
. 在这一点上,我不确定如何最好地处理我的情况,因为大多数结果总是谈论在多个列中搜索一个字符串。
我不完全确定这是如何工作的,但我想我希望RANK
从所有列的搜索中获得最高的组合。
如果这是可能的,请给我一些例子。