Вы можете попробовать несколько полнотекстовых запросов с общим табличным выражением и UNION для объединения вещей:
-- define some CTEs
WITH
-- full-text query on LastName
FT_LastName([Key], [Rank]) AS (
SELECT [Key], [Rank] FROM CONTAINSTABLE(Foo, (LastName), 'options', 100)
),
-- full-text query on Address
FT_Address([Key], [Rank]) AS (
SELECT [Key], [Rank] FROM CONTAINSTABLE(Foo, (Address), 'options', 100)
),
-- combine
FT_ReweightedTemp([Key], [RankLastName], [RankAddress]) AS (
SELECT [Key], [Rank], 0 FROM FT_LastName
UNION ALL
SELECT [Key], 0, [Rank] FROM FT_Address
),
-- calculated weighted ranks
FT_Reweighted([Key], [Rank]) AS (
SELECT [Key], MAX([RankLastName]) * 2 + MAX([RankAddress]) * 1
FROM FT_ReweightedTemp
GROUP BY [Key]
)
-- carry on
SELECT ...
FROM FT_Reweighted
INNER JOIN ...
ORDER BY [Rank]
В этом примере я взвешиваю LastName по адресу в 2: 1. Использование оператора сложения также делает строки с результатами в обоих столбцах вдвое больше, чем результаты, полученные только из одного столбца. Возможно, вы захотите использовать некую нормализацию и усреднение, чтобы объединить взвешенные ранги.