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

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

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

【51CTO.com独家特稿】MS SQL Server全文检索能够产生一个积分(即Rank值),它反映了查询数据返回结果的相关性。这里每行Rank可以被视为一种排序条件,可以反映排序所定的相关性。

注:Rank值一般与特定的用户查询相关(如使用FREETEXT子句),并不针对一般意义性质的查询。

Rank排名统计信息

当一个索引一旦被建立,其相关统计信息即被收集用于排名。建立全文目录的处理过程并不直接地建立一个单一的索引结构。实际上,微软的全文检索引擎SQL Server ( MSFTESQL)服务创造中间索引,数据均被有效地索引。事实上,MSFTESQL能够合并多个索引成为一个大的索引且这一过程将被重复多次,MSFTESQL接着进行“主合并” ,它合并了所有的中间索引成为一个大型的主索引。

当计算排名查询结果集,其中一些统计数据,可以使用来自规模较小的中间索引,以满足查询和一些主索引。这将取决于是否有中间索引已经合并与否。因此,如果中间索引均不会被合并,排名的统计资料,可以在不同的精度。这也解释了为什么同样的查询,随着时间的推移,全文检索的索引数据的不断添加、修改、删除、并为规模较小的索引合并可以返回不同分级的结果。

为了最大限度地减少的面积索引和计算复杂性,统计数据往往会四舍五入处理。

下面的列表包括了一些常用的术语和统计信息值,这些值在计算排名中是很重要的:

◆Property
全文索引栏的行。

◆Document
该实体(Document)通过查询被返回。在SQL Server中,它相当于一行。一份Document可以有多个Property,就如同一行可以有多个建立了全文索引的栏位。

◆Index
单独的反转索引包含一个或多个Document。它可能完全分布在内存或磁盘上。当查询结果匹配时,许多查询统计对于个别的索引而言是相对的。

◆Full-Text Catalog
全文检索目录。为查询建立的中间索引的集合体,该目录对于SQL Server的管理员来说,要么被建立或者没有建立。

◆Word, Token or item 关键词
全文搜索引擎搜索的基本单元, Documents文本源被分词成了Word或Token,不同语言其分词结果是不相同的。

◆Occurrence
在文本属性(document property)中关键词Word的偏移量字长是由分词器所决定的。如在第一分词是在发生1处 ,接下来的在2处,依此类推。为了避免在短语和邻近的查询出现假负数结果,在最终的句点和段落尾巴归宿的引入发生较大的差异。

◆Catalog Key
包含关键字的Word和property的组合。

◆HitCount
在一行中有多少次关键字命中的次数。

◆IndexedRowCount
索引行的总数。这种计数是基于中间索引基础上计算出来的。这个数字在精确度上可以存在着很大的不同。

◆KeyRowCount
全文目录中包含关键词的总行数。

◆MaxOccurrence
某一行property的最大匹配值,它可能存放在一个全文目录中。

◆MaxQueryRank
MSFTESQL能够返回最大的Rank值为1000。

Rank排名计算问题

计算排名(Rank)的过程,取决于多项因素。不同的语言分词记号完全不同。例如,字符串“dog-house”可以被分成“dog”、“house” ,而另一种分词方法又可能把它分成“dog-house” 。这意味着,匹配和排序会基于语言的种类而有所不同,因为其中不仅有不同的关键字,还影响到文档Document的长度,而Document 长度差异可以直接影响到检索的排名。

诸如IndexRowCount这样的统计信息可以有很大的不同。例如,如果有一个全文目录在主索引上包含有20亿记录行,然而基于中间主索引的比较文件这个统计会有偏差值。

基于此种原因,我们推荐使用ALTER FULLTEXT CATALOG ... REORGANIZE DDL命令去重建索引,以供发布重新的统计信息使用。

MSFTESQL将自动地合并基于根据中间索引大小和数值的参数而计算出来的索引。

MaxOccurrence的值被归类到1到32个层级。这意味着,比如在一份Document中50个关键字长等同于100个字长,下面的表即为范式化的。因为该文档长度在毗邻表值为32和128倍数之间 ,但它们被同样有效地视作为具有相同长度 128 ( 32 < docLength < = 128 ) 。

{
16, 32, 128, 256, 512, 725, 1024, 1450, 2048, 2896, 4096, 5792, 8192, 11585,
16384, 23170, 28000, 32768, 39554, 46340, 55938, 65536, 92681, 131072, 185363,
262144, 370727, 524288, 741455, 1048576, 2097152, 4194304
}; 

这里top_n_by_rank是用于新预先计算的rank选项,当计算排名一些附加值时,可能会四舍五入,所以对于一些预先计算的rank值上可能会存在一些差异,此时要确保预先计算rank选项可用。


共2页: 1 [2] 下一页
【内容导航】
深入SQL Server 2008
SQL Server 2008/2005全解
SQL Server入门到精通
C# 3.0完全自学宝典
Visual Basic完全自学宝典
 
 验证码: (点击刷新验证码)   匿名发表
  • 野蛮生长

  • 作者:冯仑著
  • “地产界的思想家”冯仑纵横生意江湖20年来,第一次系统梳理出书。  三十年来中国民营企业从前公司时代发展到公司时代,21..
Copyright©2005-2008 51CTO.COM 版权所有