Приоритет / вес столбцу с использованием FREETEXTTABLE в динамическом TSQL

У меня есть динамический 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 

person derek    schedule 03.12.2009    source источник


Ответы (2)


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

person Jason Kresowaty    schedule 24.12.2011

Вы можете создать столбец, объединив:

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

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

person Jaimie Sirovich    schedule 10.05.2013