我正在使用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
...
此结果集中排名范围的传播不足表明搜索结果无法实现。
如何在结果中输出一个布尔值作为额外列,以指示排名的扩散是否表明结果是否准确?
谢谢!
答案 0 :(得分:1)
计算结果集的中值与排名最高的值之间的百分比差异。结果越大,匹配准确度越高。
对于第一个结果集:(102-18)/ 102 = 82.35%。
然后在代码中设置基线 - 例如,如果传播大于40%,那么第1行可能包含准确的结果。对各种搜索进行一些测试以确定基线值。
答案 1 :(得分: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
,因此解决方案并不完美。
答案 2 :(得分:0)
你当然可以使用方差作为“传播”的指标,但我不认为这是正确的方法。 (特别是如果你只看前n个结果。)
相关性是信息检索中的一件大事。它取决于排名方法,也取决于搜索词发生的概率以及其他搜索词的相关性。你可以做的事情:
计算随机文档中搜索词的预期出现次数(平均值)。然后比较返回结果中出现的次数。然后,您的排名将计入我的doc / mean-count。如果结果明显高于1,则文档是相关的。