Полнотекстовый поиск SQL Server - взвешивание некоторых столбцов над другими - PullRequest
13 голосов
/ 06 июля 2011

Если у меня есть следующий полнотекстовый поисковый запрос:

SELECT *
FROM dbo.Product
   INNER JOIN CONTAINSTABLE(Product, (Name, Description, ProductType), 'model') ct
      ON ct.[Key] = Product.ProductID

Можно ли взвесить столбцы, по которым производится поиск?

Например, меня больше интересует слово модельпоявляется в столбце «Имя», чем в столбцах «Описание» или «Тип продукта».

Конечно, если слово находится во всех 3 столбцах, я ожидаю, что оно будет иметь более высокий рейтинг, чем если бы оно было только в столбце имени.Есть ли способ повысить ранг строки, если он просто отображается в поле «Имя» вместо «Описание / ProductType»?

Ответы [ 2 ]

11 голосов
/ 07 июля 2011

Вы можете сделать что-то вроде следующего запроса.Здесь WeightedRank вычисляется путем умножения ранга отдельных совпадений.ПРИМЕЧАНИЕ: к сожалению, у меня не установлен Northwind, поэтому я не смог проверить это, поэтому посмотрите на него как на псевдокод и сообщите, если он не работает

5 голосов
/ 05 марта 2015

Листинг 3-25.Пример поиска по множителю ранга столбца из Pro Полнотекстовый поиск в SQL Server 2008

SELECT *
FROM (
    SELECT Commentary_ID
        ,SUM([Rank]) AS Rank
    FROM (
        SELECT bc.Commentary_ID
            ,c.[RANK] * 10 AS [Rank]
        FROM FREETEXTTABLE(dbo.Contributor_Birth_Place, *, N'England') c
        INNER JOIN dbo.Contributor_Book cb ON c.[KEY] = cb.Contributor_ID
        INNER JOIN dbo.Book_Commentary bc ON cb.Book_ID = bc.Book_ID

        UNION ALL

        SELECT c.[KEY]
            ,c.[RANK] * 5
        FROM FREETEXTTABLE(dbo.Commentary, Commentary, N'England') c

        UNION ALL

        SELECT ac.[KEY]
            ,ac.[RANK]
        FROM FREETEXTTABLE(dbo.Commentary, Article_Content, N'England') ac
        ) s
    GROUP BY Commentary_ID
    ) s1
INNER JOIN dbo.Commentary c1 ON c1.Commentary_ID = s1.Commentary_ID
ORDER BY [Rank] DESC;
...