0

我正在使用 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
...

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

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

谢谢!

4

3 回答 3

1

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

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

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

于 2009-08-15T18:05:17.567 回答
1

您可以运行其他查询以了解您的匹配与精确匹配相比有多好。然后,您可以将基准的精确匹配排名作为 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这样的解决方案并不完美。

于 2015-05-28T15:14:37.600 回答
0

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

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

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

于 2009-08-15T15:52:00.707 回答