中等权重的全文搜索给出了意想不到的排名

问题描述 投票:0回答:1

给定一个 SQL Server 表,其中一列 [SearchableDescription] 包含在带有示例数据的全文搜索目录/索引中:

  1. 苹果香蕉樱桃
  2. 苹果香蕉樱桃葡萄
  3. 苹果香蕉樱桃葡萄山药
  4. 苹果香蕉樱桃葡萄山药西葫芦
  5. ...

我们使用 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) )';

然后包含两个搜索词的行排名最高。

我记得排名计算中内置了单词组件的唯一性,但令我惊讶的是它可能会影响答案,以至于忽略单词匹配的事实。在真实的测试用例中,我们的大多数单词和搜索术语都非常独特(零件编号、技术系列名称等),因此即使两个术语都是如此,这种情况似乎仍然会发生。

想了解这种行为背后的原因。如果使用较小的输入权重是可以接受的,那么它还有其他缺点吗?

sql-server full-text-search containstable isabout
1个回答
0
投票
频率-逆文档频率(TF-IDF)排序模型

全文搜索中使用的排名算法基于多种因素的组合,其中一个因素是文档中搜索词的频率与其在整个搜索文档集中的频率相比。其影响可能是违反直觉的,例如:

    排名分数取决于您的单词在每个文档以及所有文档中出现的频率,即计算您在一本书中以及在所有书籍中看到“樱桃”和“葡萄”的次数。
  • 如果你给“cherry”和“grape”一个低分(比如0.1),这些词就没那么重要了。因此,该算法会考虑其他因素,例如文档中有多少不同的单词或文档有多长。在这种情况下,同时包含“樱桃”和“葡萄”的文档可能会获得更高的分数。
  • 但是如果你给“cherry”和“grape”一个高分(比如0.5),这些词就会变得更加重要。因此,算法更关注这些单词。仅包含“cherry”或“grape”的文档可能会获得更高的分数,因为这些词非常重要(并且也较少被其他术语稀释)。
理解TF-IDF(词频-逆文档频率)

© www.soinside.com 2019 - 2024. All rights reserved.