为什么或如何使FREETEXTTABLE给出比其他人更高的等级值

时间:2008-10-16 20:11:07

标签: sql-server sql-server-2005 tsql freetext freetexttable

有一个存储过程在两个表上使用FREETEXTTABLE两次,然后合并结果并返回前50个。

问题是,如果我搜索“布鲁斯特女人”,结果会返回“来自doofus motha的忏悔”,表A中排名为143,排名第102位为“布鲁斯特女人之地”来自表B.

这是因为伯爵? (表A返回结果总计为2399.表B返回结果总计为3445.)

3 个答案:

答案 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