【问题标题】:Identifying accurate matches from SQL Server Full Text Search从 SQL Server 全文搜索中识别准确的匹配项
【发布时间】:2009-08-15 14:41:35
【问题描述】:

我正在使用 SQL Server 2008 全文搜索,并加入 FreeTextTable 以确定结果的排名。

如何确定结果集是否准确匹配?

例如,对于一次搜索,我可能会得到以下结果:

Manufacturer | Rank
===================

LG U300 ------- 102
LG C1100 ------ 54
LG GT505 ------ 18
LG KF300 ------ 18
LG Callisto --- 18
...

排名范围的分布表明,一个结果比所有其他结果更相关,这表明排名靠前的结果很可能是搜索词的准确匹配。

但是对于另一个搜索,我可能会得到这个结果:

Manufacturer | Rank
===================

LG C1100------- 33
LG GC900 ------ 31
LG GT500 ------ 31
LG KC910 ------ 31
LG KF310 ------ 31
...

此结果集中的排名范围缺乏分布表明搜索结果不准确。

如何在结果中输出一个布尔值作为额外的列,指示排名的分布是否表明结果准确?

谢谢!

【问题讨论】:

    标签: sql-server math full-text-search statistics ranking


    【解决方案1】:

    计算结果集的中值与排名靠前的值之间的百分比差异。结果越大,匹配准确率越高。

    对于第一个结果集:(102-18)/102 = 82.35%。

    然后在代码中设置基线 - 例如,如果价差大于 40%,则很可能第 1 行包含准确的结果。对各种搜索进行一些测试以确定基线值。

    【讨论】:

      【解决方案2】:

      您可以运行其他查询来了解您的匹配与完全匹配相比有多好。然后,您可以将基准的精确匹配排名作为 100%。

      DECLARE @Manufacturer varchar(500)
      DECLARE @tManufacturer varchar(500)
      DECLARE @maxRank int
      
      SET @Manufacturer = 'your search term'
      
      SELECT @tManufacturer=Manufacturer
      FROM ManufacturerTable m
      INNER JOIN FREETEXTTABLE(ManufacturerTable, Manufacturer, @Manufacturer, 1) AS KEY_TBL
      ON m.ManufacturerID = KEY_TBL.[KEY]
      
      if (@tManufacturer is null)
       SET @tManufacturer = @Manufacturer
      
      SELECT @maxRank=Rank
      FROM ManufacturerTable m
      INNER JOIN FREETEXTTABLE(ManufacturerTable, Manufacturer, @tManufacturer, 1) AS KEY_TBL
      ON m.ManufacturerID = KEY_TBL.[KEY]
      
      SELECT Manufacturer, KEY_TBL.RANK*100/@maxRank as MatchRank
      FROM ManufacturerTable m
      INNER JOIN FREETEXTTABLE(ManufacturerTable, Manufacturer, @tManufacturer, 10) AS KEY_TBL
      ON m.ManufacturerID = KEY_TBL.[KEY]
      

      警告:在某些情况下您可以得到MatchRank > 100,因此解决方案并不完美。

      【讨论】:

        【解决方案3】:

        您当然可以将方差用作“价差”的指标,但我认为这不是正确的方法。 (特别是如果您只查看前 n 个结果。)

        相关性在信息检索中很重要。它取决于排名方法,也取决于搜索词出现的概率以及其他搜索词的相关性。你可以做的事情:

        计算随机文档中搜索词的预期出现次数(平均数)。然后比较返回结果中出现的次数。然后,您的排名将是 counts-in-my-doc / mean-count。如果结果显着高于 1,则文档是相关的。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-02-14
          • 2014-09-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-09-06
          • 1970-01-01
          相关资源
          最近更新 更多