给定一个 SQL Server 表,其中一列 [SearchableDescription] 包含在带有示例数据的全文搜索目录/索引中:
我们使用 Containstable() 搜索它们,例如:
declare
@aboutPredicate nvarchar(4000) =
N'IsAbout(
cherry weight (0.5),
grape weight (0.5)
)';
select *
from TheTable t
join ContainsTable(TheTable, SearchableDescription, @aboutPredicate) ct
on ct.Key = t.RowId
问题出在 [Rank] 列输出上。当输入权重>= .3(如上所示)时,通常包含“两者”樱桃和葡萄的行的排名低于仅包含樱桃或葡萄之一的行。 但是,如果权重调整得低得多(~.1),例如:
declare
@aboutPredicate nvarchar(4000) =
N'IsAbout(
cherry weight (0.1),
grape weight (0.1)
)';
然后包含两个搜索词的行排名最高。
我记得排名计算中内置了单词组件的唯一性,但令我惊讶的是它可能会影响答案,以至于忽略单词匹配的事实。在真实的测试用例中,我们的大多数单词和搜索术语都非常独特(零件编号、技术系列名称等),因此即使两个术语都是如此,这种情况似乎仍然会发生。
想了解这种行为背后的原因。如果使用较小的输入权重是可以接受的,那么它还有其他缺点吗?
: 全文搜索中使用的排名算法基于多种因素的组合,其中一个因素是文档中搜索词的频率与其在整个搜索文档集中的频率相比。其影响可能是违反直觉的,例如: