您所在的位置: 首页 > 原创 >

如何理解SQL Server中的Ranking(2)

 2008-02-19 15:20  铁在烧 编译  51CTO.com  我要评论(0)
  • 摘要:Rank值一般与特定的用户查询相关(如使用FREETEXT子句),并不针对一般意义性质的查询。本文介绍了Rank排名统计信息、计算问题、常量等内容,供大家参考!
  • 标签:SQL Server  全文  检索  Rank  排序

Ranking常量表

StatisticalWeight = Log2( ( 2 + IndexedRowCount ) / KeyRowCount )
Rank = min( MaxQueryRank, HitCount * 16 * StatisticalWeight / MaxOccurrence )

短语的匹配排名象个别Keys如KeyRowCount,估计计算结果可能不准确,会稍高于实际数字。

ISABOUT的排序Ranking

ISABOUT是一种被称之为向量空间查询的传统信息检索术语。该排名算法(Rank algorithm)采用了著名的杰卡德公式。排名的计算方法先为每个条目做计算,然后得出结果,相关说明如下。

ContainsRank = 同样被用来计算 单条目的CONTAINSTABLE排序 (如下) 。Weight = 每个条目查询的权重值,默认为1。
WeightedSum = Σ[key=1 to n] ContainsRankKey * WeightKey
Rank =  ( MaxQueryRank * WeightedSum ) / ( ( Σ[key=1 to n] ContainsRankKey2 )
+ ( Σ[key=1 to n] WeightKey2 ) - ( WeightedSum ) )

FREETEXT中的排序Ranking

FREETEXT排名是基于对奥卡皮BM25排名公式计算得出的。 FREETEXT查询会增加关键字并间接生成到查询(间接形式的原始查询词),这些关键词被当作独立个体分别加以处理,而从它们所派生出的同义词也被视作相同权重计算。每个关键词在查询中的统计将直接影响到排序Rank值。

Rank = Σ[Terms in Query] w ( ( ( k1 + 1 ) tf ) / ( K + tf ) ) * ( ( k3 + 1 ) qtf / ( k3 + qtf ) ) )

注:

W是Robertson-Sparck Jones的权重。

在这个公司中,w被定义为:

w = log10 ( ( ( r + 0.5 ) * ( N – R + r + 0.5 ) ) / ( ( R – r + 0.5 ) * ( n – r + 0.5 ) )
N:被查询的property计算的索引行数。 
n:包含关键字Word的行数。
K is ( k1 * ( ( 1 – b ) + ( b * dl / avdl ) ) ).
dl:property长度,关键字 word出现的次数。
Avdl:被查询的property平均长度,在关键字出现的次数。
k1, b, and k3 分别为常量1.2, 0.75, and 8.0。
tf:在特定行中出现的在查询property中的频率字。
Rank = Σ[Terms in Query] w ( ( ( k1 + 1 ) tf ) / ( K + tf ) ) * ( ( k3 + 1 ) qtf / ( k3 + qtf ) ) )

注:

W是Robertson-Sparck Jones的权重。

在这个公司中,w被定义为:
w = log10 ( ( ( r + 0.5 ) * ( N – R + r + 0.5 ) ) / ( ( R – r + 0.5 ) * ( n – r + 0.5 ) )

其中:

N:提交查询的Property被索引行的计数。 
K :( k1 * ( ( 1 – b ) + ( b * dl / avdl ) ) )。
dl :  Property长度在关键字 word出现的次数。
Avdl : 被查询的Property平均长度,在关键字出现的次数。

k1, b, and k3分别是常量1.2, 0.75, and 8.0。
tf:在特殊行中出现的在查询Property中的频率字。

最后 ,让我们用一个实例来观察Rank计算结果,可以加深对以上Rank公式的理解。

CREATE TABLE RANK(id int IDENTITY,
TITLE nvarchar(1000),
Keyword nvarchar(30) ,
context nvarchar(max),
CONSTRAINT PK_RANK PRIMARY KEY(id)) 
INSERT RANK(TITLE, Keyword,Context)
SELECT N'中国招商投资提供资金合同',  '资金,合同' ,'2008中国招商投资提供资金合同

中国招商投资提供资金合同中国招商投资提供资金合同'
UNION ALL SELECT N'资金合同',  '资金' ,'资金'
UNION ALL SELECT N'大资金大合同',  '资金' ,'资金'
UNION ALL SELECT N'国际资金国际合同',  '国际资金国际合同' ,

'1国际资金国际合同亚洲资金亚洲合同中国资金合同'
UNION ALL SELECT N'国际资金国际合同',  '国际资金国际合同' ,

'1国际资金国际合同亚洲资金亚洲合同中国资金合同'
UNION ALL SELECT N'资金合同',  '资金' ,'资金'
UNION ALL SELECT N'国际资金合同',  '资金' ,'资金'
UNION ALL SELECT N'中国资金合同中国资金合同',  '资金' ,'资金'
UNION ALL SELECT N'国际资金国内资金国家资金',  '资金' ,'资金'
UNION ALL SELECT N'国家资金合同国际资金合同',  '资金' ,'资金'
UNION ALL SELECT N'国际资金合同',  '资金' ,'资金'
UNION ALL
SELECT N' 大量资金大量资金大量资金大量资金大量资金大量资金大量资金大量资金     

大量资金',  '资金' ,'资金'
UNION ALL  
SELECT N' 大量大量大量资金大量大量大量大量大量大量大量大量大量大量大量大量     

大量大量',  '资金' ,'资金'
GO 

--初始化全文索引
EXEC sp_fulltext_database 'enable' 
GO 

--创建一个名为  DEMO   的全文目录
EXEC sp_fulltext_catalog 'DEMO', 'create'   
GO 

--创建并填充全文索引
EXEC sp_fulltext_table 'RANK','create','DEMO','PK_RANK' 
EXEC sp_fulltext_column 'RANK','TITLE','add',0x0804 
EXEC sp_fulltext_column 'RANK','Keyword','add',0x0804
EXEC sp_fulltext_column 'RANK','context','add',0x0804
EXEC sp_fulltext_table 'RANK','start_change_tracking' 
EXEC sp_fulltext_table 'RANK','Start_background_updateindex' 
GO 

请观察如下语句所产生的按rank值倒序排序返回的结果集:

SELECT f.RANK,TITLE,Keyword ,context
FROM FREETEXTTABLE([rank], (title) ,'资金') AS f
RIGHT JOIN [rank] AS p  ON f.[key] = p.ID
ORDER BY f.rank desc

原文链接:http://msdn2.microsoft.com/en-us/library/ms142524.aspx

【相关文章】

【责任编辑:火凤凰 TEL:(010)68476606】


共2页: 上一页 [1] 2
【内容导航】
深入SQL Server 2008
SQL Server 2008/2005全解
SQL Server入门到精通
Perl实例精解(第4版)
SQL Server 2005 Integration Services专家教程
 
 验证码: (点击刷新验证码)   匿名发表
  • 网络工程师考试案例动手实验营

  • 作者:郭春柱
  • 本书依据2009年版《网络工程师考试大纲》的考核要求,深入研究了历年网络工程师考试试题的命题风格和试题结构,对考查的知识点..
Copyright©2005-2008 51CTO.COM 版权所有