SQL Server - веса полных текстов / ранжирование на основе сопоставленного столбца - PullRequest
2 голосов
/ 27 мая 2010

Как я могу применить более высокий рейтинг к результатам поиска, если поисковое слово было найдено в определенном столбце?

Например, если поисковым термином является «King», и он был найден в «LastName», я хочу, чтобы он имел более высокий рейтинг, чем если бы он отображался как часть «King Street» в адресе.

Как мне это сделать?

Ответы [ 2 ]

0 голосов
/ 07 марта 2012

Вы можете попробовать несколько полнотекстовых запросов с общим табличным выражением и 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. Использование оператора сложения также делает строки с результатами в обоих столбцах вдвое больше, чем результаты, полученные только из одного столбца. Возможно, вы захотите использовать некую нормализацию и усреднение, чтобы объединить взвешенные ранги.

0 голосов
/ 03 июня 2010

Проверка 2008 книг в Интернете CONTAINSTABLE .

Вы можете использовать параметры column_name / column_list в сочетании с weight_value для достижения желаемых результатов.

Используйте column_name, чтобы применить больший вес к LastName, и column_list для остальных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...