如何理解SQL Server中的Ranking
2008-02-20 09:52:56 来源:WEB开发网其中:
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
更多精彩
赞助商链接