有一个存储过程在两个表上使用FREETEXTTABLE两次,然后合并结果并返回前50个。
问题是,如果我搜索“女人的布鲁斯特”,结果返回“一个前笨蛋莫塔的告白”,从表A排名143,从表B返回排名第二的“布鲁斯特的女人”,排名102。
是因为伯爵吗?(表A返回结果总数为2399。表B返回结果总数为3445。)
发布于 2008-10-16 21:29:39
简短的回答是:
自由文本排名基于OKAPI BM25排名公式。对查询中的每个术语进行排序,并对值求和。自由文本查询将通过词形变化生成(原始查询术语的词干形式)将单词添加到查询中;这些单词被视为独立的单词,没有特殊的权重或与生成它们的单词之间的关系。从同义词功能生成的同义词被视为独立的、同等权重的术语。
当然,更长、更复杂的答案可以在微软的网站上找到。对于高等数学,click here。
发布于 2008-10-20 17:59:48
1)噪声文件被限制为几个字符,这意味着单词"of“现在被认为是重要的。
2)两个表的结果(计数)确实很重要,因为较小的表很可能会被赋予更好的权重值。这将使排名在较小的表中变得更高。
Josef到MSDN的链接在计算排名值方面做得很好。
发布于 2021-06-10 14:45:47
USE AdventureWorks2012;
GO
SELECT FT_TBL.Description
,KEY_TBL.RANK
FROM Production.ProductDescription AS FT_TBL
INNER JOIN FREETEXTTABLE(Production.ProductDescription,
Description,
'high level of performance') AS KEY_TBL
ON FT_TBL.ProductDescriptionID = KEY_TBL.[KEY]
ORDER BY RANK DESC;
GO 使用这种内部联接方法可以按排序顺序获得相关结果。参考:Azure SQL FREETEXABLE
https://stackoverflow.com/questions/210094
复制相似问题