这是全文搜索的top_n_by_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
param时,它会给我超过1000条记录。
我的问题是,top_n_by_rank
参数是否仅搜索前100条记录或
它是否搜索所有记录并仅获得前100个搜索结果?
答案 0 :(得分:0)
您实际问题的答案:
top_n_by_rank参数仅搜索前100条记录,或者搜索所有记录并仅获取前100条搜索结果。
是:top_n_by_rank
应告诉SQL Server检查所有记录,并在结果中仅选择最匹配的top_n_by_rank
个数。
它不像普通的SELECT TOP * FROM table
,它关注记录的匹配等级。
以下是关于FREETEXTTABLE的MSDN文档:
TOP_N_BY_RANK
指定仅返回按降序排列的最高排名匹配。仅在指定整数值n时适用。如果top_n_by_rank与其他参数组合,则查询可以返回的行数少于实际匹配所有谓词的行数。 top_n_by_rank允许您通过仅调用最相关的匹配来提高查询性能。