1

这是关于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参数时,它给了我超过 1000 条记录。

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

4

1 回答 1

0

您的实际问题的答案:

top_n_by_rank 参数仅搜索前 100 条记录,还是搜索所有记录并仅获取前 100 条搜索结果。

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

它不像 plain SELECT TOP * FROM table,它注意记录的匹配等级。

以下是FREETEXTTABLE上的 MSDN 文档对此的说明:

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

于 2017-02-24T10:01:56.667 回答