Приоритет / вес столбца с помощью FREETEXTTABLE в dymnamic TSQL - PullRequest
3 голосов
/ 03 декабря 2009

У меня есть динамический sql, который выполняет разбиение на страницы и полнотекстовый поиск с использованием CONTAINSTABLE, который работает нормально. Проблема в том, что я хотел бы использовать FREETEXTTABLE, но взвесить некоторые столбцы над другими

Вот мой оригинальный sql и вес рейтинга, который я хотел бы интегрировать (Я изменил имена по соображениям конфиденциальности)

SELECT * FROM 
    (SELECT TOP 10 Things.ID, ROW_NUMBER() 
        OVER(ORDER BY KEY_TBL.RANK DESC ) AS Row FROM [Things]
    INNER JOIN 
        CONTAINSTABLE([Things],(Features,Description,Address),
            'ISABOUT("cow" weight (.9), "cow" weight(.1))') AS KEY_TBL 
    ON [Properties].ID = KEY_TBL.[KEY] 
    WHERE TypeID IN (91, 48, 49, 50, 51, 52, 53) 
        AND
        dbo.FN_CalcDistanceBetweenLocations(51.89249, -8.493376, 
        Latitude, Longitude) <= 2.5 
    ORDER BY KEY_TBL.RANK DESC ) x 
WHERE x.Row BETWEEN 1 AND 10

Вот то, что я хотел бы интегрировать

select sum(rnk) as weightRankfrom
From
(select 
    Rank * 2.0 as rnk, 
    [key] 
from freetexttable(Things,Address,'cow')
union all 
select 
    Rank * 1.0 as rnk, 
    [key] 
from freetexttable(Things,(Description,Features),'cow')) as t 
group by [key] 
order by weightRankfrom desc 

Ответы [ 2 ]

0 голосов
/ 10 мая 2013

Вы можете создать столбец с конкатенацией:

  1. Less_important_field &
  2. More_important_field & More_important_field (2x)

Это может выглядеть очень глупо, но это именно то, что BM25F делает для имитации структурированных документов. Единственный недостаток этой хак-реализации в том, что вы не можете динамически изменять вес. Это немного раздувает таблицу, но не обязательно индекс, который должен рассчитывать только.

0 голосов
/ 24 декабря 2011

К сожалению, алгоритм, используемый механизмом свободного текста (FREETEXTTABLE), не может указать значимость различных входных столбцов. Если это критично, вам может потребоваться использовать другой продукт для своих нужд в свободном тексте.

...