我有动态sql,使用CONTAINSTABLE执行分页和全文搜索,工作正常。问题是我想使用FREETEXTTABLE但是比其他人更重要一些colums的等级
这是我的原始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
答案 0 :(得分:0)
不幸的是,freetext引擎(FREETEXTTABLE
)使用的算法无法指定各种输入列的重要性。如果这很关键,您可能需要考虑使用不同的产品来满足您的自由文本需求。
答案 1 :(得分:0)
您可以使用以下连接创建列:
这可能看起来很愚蠢,但它实际上是BM25F模拟结构化文档的行为。这种黑客实施的唯一缺点是你实际上无法动态改变权重。它稍微膨胀了一下,但不一定是指数,这应该只需要计数。