有一个存储过程在两个表上使用FREETEXTTABLE两次,然后合并结果并返回前50个。
问题是,如果我搜索“布鲁斯特女人”,结果会返回“来自doofus motha的忏悔”,表A中排名为143,排名第102位为“布鲁斯特女人之地”来自表B.
这是因为伯爵? (表A返回结果总计为2399.表B返回结果总计为3445.)
答案 0 :(得分:4)
答案简短:
Freetext排名基于OKAPI BM25排名公式。每个词都在 查询排名,值是 求和。 Freetext查询将添加 通过屈折来查询的单词 一代(词干的形式) 原始查询条款);这些话是 作为单独的条款处理,没有 特殊的权重或与...的关系 他们所说的话 产生。从中生成的同义词 同义词库功能被视为 单独的,同等加权的术语。
当然,可以在微软的网站上找到更长,更复杂的答案。对于高等数学,click here。
答案 1 :(得分:1)
1)噪音文件仅限于几个字符,这意味着“of”这个词现在被认为很重要。
2)两个表的结果(计数)确实很重要,因为较小的表最有可能被赋予更好的权重值。这会使得较小的表中的等级偏高。
Josef与MSDN的链接很好地解决了它如何计算排名值。
答案 2 :(得分:0)
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
使用这种 INNER JOIN 方法按排序顺序获取相关结果。 参考:Azure SQL FREETEXABLE