1

这是关于全文搜索的参数top_n_by_rank问题top_n_rank全文搜索

我有一个查询,假设:

SELECT * 
FROM Publisher p 
INNER JOIN FREETEXTTABLE(Publisher, Name, @searchText, 100) PublisherSearch 
      ON p.Id = PublisherSearch.[Key] 
ORDER BY PublisherSearch.[Rank] 

在这里,我已经给了top_n_by_rank = 100。 这应该给我排名前100的记录。 但我只收到61条记录。 当我删除top_n_rank参数,它给了我超过1000条记录。

我的问题是,top_n_by_rank参数是只搜索前100个记录还是 它是否搜索所有记录并只获得前100个搜索结果?

+0

当你删除INNER JOIN并像以上那样运行FREETEXTTABLE查询时会发生什么 - 从FREETEXTTABLE(Publisher,Name,@searchText,100)中选择* *?关于FREETEXTTABLE的MSDN文章指出:“如果top_n_by_rank与其他参数结合使用,则查询可能返回的行数少于实际匹配所有谓词的行数。” – aks

回答

0

回答您的实际问题:

只做第一个100个的记录TOP_N_BY_RANK参数搜索或者它搜索上的所有记录,仅获得搜索结果的前100。

是:top_n_by_rank应该告诉SQL Server检查所有记录,并在结果中只选择top_n_by_rank数量的最佳匹配的人的。

这不像普通的SELECT TOP * FROM table,它关注记录的匹配等级。

这里是上FREETEXTTABLE MSDN文档说一下:

TOP_N_BY_RANK
指定只nhighest排名匹配,按降序排列,返回。仅在指定了整数值n时适用。如果top_n_by_rank与其他参数组合在一起,则查询可能返回的行数少于实际匹配所有谓词的行数。 top_n_by_rank允许您通过仅调用最相关的匹配来提高查询性能。