天道酬勤,学无止境

FREETEXTTABLE always has a rank of 0

I'm using SQLServer 2008 and if I perform the following query:

SELECT 
  *
FROM
  FREETEXTTABLE(SomeTable, Name, 'a name that I know exists')

I get the rows back that I would expect, but the rank is always 0.

Searching for a solution to this problem, I found this question on the Microsoft ASP.NET forum, and sure enough if I add:

ALTER FULLTEXT CATALOG MyCatalog REBUILD

I start to get a rank - but only temporarily.

I don't want to have to rebuild my catalog every time I do a search especially when I have lots of data in my database and if I add it to my Sproc directly before the query, my query returns no results anyway, presumably because the catalog has finished being rebuilt. There seem to be other people having this and similar problems but I have been unable to find a solution. Any ideas?

评论

The rank is relative to the other results returned in the query and is therefore only useful for sorting on relevance from the returned values. There is detailed information on the ranking method.

I am running in the same issue, and currently accepted answer is not a solution for me.

Yes the ranking is done as said by this answer, but it is no way a reason for having inconsistent results when it has been some times since the last catalog rebuild. Ranking should not dramatically change upon rebuild and even less some minutes after rebuild...

For me, there is a bug in freetexttable ranking. (Bug which does not affect containstable ranking: I have checked it myself with my own buggy catalog, and it is also written on this Microsoft forum post.)

From this other Microsoft forum post it seems this bug occurs only in catalog having only very few rows indexed. Adding data to the catalog causes the bug to disappear.

So here is my answer, taken from Pavel Valenta on yet another Microsoft forum post:

If your real catalog is not going to have more than a few hundreds rows indexed, add some dummy table to your catalog in order to have more rows indexed.

This will not pollute your results due to the way queries are build. Yes this seems quite a strange fix. But that is the only one that had solved the trouble for me.

One final note: I had this problem with sql 2005 sp4, not tested with 2008. (The question is for 2008.)

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 使用数量不确定的参数时,如何避免使用动态SQL?(How do I avoid dynamic SQL when using an undetermined number of parameters?)
    问题 我有一个正在使用的数据库的类似于StackOverflow的标记系统。 我正在编写一个存储过程,该存储过程基于WHERE子句中未确定数量的标签来寻找结果。 可能有0到10个标记之间的任意位置来过滤结果。 因此,例如,用户可能正在搜索带有“ apple”,“ orange”和“ banana”标签的商品,并且每个结果都必须包含所有3个标签。 我的查询变得更加复杂,因为我还在处理用于标记的交叉引用表,但是出于这个问题的目的,我将不再赘述。 我知道我可以进行一些字符串操作,并向exec()函数提供查询以解决此问题,但我宁愿不要解决与动态SQL相关的性能问题。 我认为最好是SQL为存储的proc缓存查询计划。 在这种情况下,您使用了哪些技术来避免动态SQL? 根据大众的需求,这是我正在使用的查询: SELECT ft.[RANK], s.shader_id, s.page_name, s.name, s.description, s.download_count, s.rating, s.price FROM shader s INNER JOIN FREETEXTTABLE(shader, *, @search_term) AS ft ON s.shader_id = ft.[KEY] WHERE EXISTS(SELECT tsx.shader_id FROM tag
  • 实体框架6代码优先功能映射(Entity Framework 6 Code First function mapping)
    问题 我想将实体框架6集成到我们的系统中,但是有问题。 我想使用代码优先。 由于其他原因,我不想使用Database First * .edmx文件。 我使用属性映射[Table],[Column],这很好用数据库具有许多用户定义的函数,我需要在Linq To Entities查询中使用它们。 问题是: 我无法通过[Table],[Column]之类的属性映射功能。 [DbFunction]仅提供1个属性,该属性需要* .edmx文件。 我可以在* .edmx文件中具有功能映射,但是这意味着我不能为实体使用属性映射:[表],[列]。 映射必须在* .edmx或属性中完整。 我试图通过以下代码创建DbModel并添加函数: public static class Functions { [DbFunction("CodeFirstNamespace", "TestEntity")] public static string TestEntity() { throw new NotSupportedException(); } } public class MyContext : DbContext, IDataAccess { protected MyContext (string connectionString) : base(connectionString
  • How do I avoid dynamic SQL when using an undetermined number of parameters?
    I have a StackOverflow-like tagging system for a database I'm working on. And I'm writing a stored procedure that looks for results based on an undetermined number of tags in a WHERE clause. There could be anywhere between 0 and 10 tags to filter results. So for example the user could be searching for items tagged with 'apple', 'orange', and 'banana' and each result must include all 3 tags. My query is made even more complicated because I'm also dealing with a cross reference table for the tagging, but for the purposes of this question I won't go into that. I know I can do some string
  • Giving precedence/weight to a column using FREETEXTTABLE
    I am using SQL Server Full Text Search, with the keyword FREETEXTTABLE to return a table of results based on a few columns, searching for a keyword. Now I have 2 main columns that I am searching on, Title and Description, I want to give precedence to the Title column as this will most likely have my results but Description might contain results too but I want it to give precedence for a word in Title over Description (but I don't want to use CONTAINSTABLE as this is too specific). Is there a way to give columns weights/precedence using FREETEXTTABLE?
  • how to create and call scalar function in sql server 2008
    I have created a Scalar Functions, it was created successfully, but when I call the function using select statement, it says invalid object, I altered the function, I got the message command completed successfully, but when I call the function, I gets same error. below is the function I am trying to call: ALTER FUNCTION [dbo].[fn_HomePageSlider] ( @PortalID int, @ArticleID int ) RETURNS NVARCHAR(MAX) AS BEGIN DECLARE @HTML NVARCHAR(MAX) SET @HTML = ''; Declare @Title varchar(1000) Select @Title= Title from CrossArticle_Article c where c.Id=@ArticleID Select @HTML = @HTML + '<div class=
  • SQL Fuzzy Matching
    Hope i am not repeating this question. I did some search here and google before posting here. I am running a eStore with SQL Server 2008R2 with Full Text enabled. My requirements, There is a Product Table, which has product name, OEM Codes, Model which this product fits into. All are in text. I have created a new column called TextSearch. This has concatenated values of Product Name, OEM Code and Model which this product fits in. These values are comma separated. When a customer enters a keyword, we run search on TextSearch column to match for products. See matching logic below. I am using a
  • SQL模糊匹配(SQL Fuzzy Matching)
    问题 希望我不再重复这个问题。 我在这里和谷歌做了一些搜索,然后再在这里发布。 我正在使用启用了全文本的SQL Server 2008R2运行eStore。 我的要求 有一个产品表,其中包含该产品适合的产品名称,OEM代码,型号。 所有内容均为文字。 我创建了一个名为TextSearch的新列。 这具有此产品适用的产品名称,OEM代码和型号的串联值。这些值以逗号分隔。 当客户输入关键字时,我们在TextSearch列上运行搜索以匹配产品。 请参阅下面的匹配逻辑。 我使用的是混合全文,通常喜欢进行搜索。 这给出了更相关的结果。 在临时表中执行的所有查询均返回。 匹配逻辑 运行以下SQL以使用全文获取相关产品。 但是@Keywords将被预处理。 说“ CLC 2200”将更改为“ CLC * AND 2200 *” 从dbo.product的位置选择ID(TextSearch,@ Keywords) 另一个查询将使用正常的赞运行。 因此,“ CLC 2200”将被预处理为“像%clc%这样的TextSearch和像%2200%这样的TextSearch”。 这仅仅是因为全文搜索不会在关键字之前搜索模式。 例如,它不会返回“ pclc 2200”。 从dbo.Product中选择ID,其中TextSearch如'%clc%'和TextSearch如'%2200%'
  • 整数转换(变窄,变宽),未定义的行为(Integer conversions(narrowing, widening), undefined behaviour)
    问题 对于我而言,以一种容易理解的方式查找有关该主题的信息非常困难,因此我要求对所发现的内容进行回顾,这仅涉及转换和转换。 在示例中,我将引用: (signed/unsigned) int bigger; (signed/unsigned) char smaller; 截断整数。 (较大->较小) 第一截断bigger上MSB侧,以匹配smaller尺寸。 第二,根据较小的类型将截断的结果转换为有符号/无符号。 如果较大的值太大而无法放入较小的类型,则会导致未定义的行为(请对此进行纠正)。 但是,我的规则应该在所有计算机上都可以使用(也请对此进行纠正),并且结果应该是可预测的。 加宽整数(较小->较大) a) signed char -> signed int 用MSB(1或0)前置较小以匹配较大的大小转换为已签名 b) signed char -> unsigned int 用MSB(1或0)开头较小以匹配较大的大小。 转换为无符号 c) unsigned char -> signed int 前面加0以匹配更大的尺寸转换为已签名 d) unsigned char > unsigned int 前面加0以匹配更大的尺寸转换为无符号 我没有提到的未定义/未指定的行为会在哪里弹出? 回答1 整数转换永远不会产生未定义的行为(它会产生实现定义的行为)。
  • [模型压缩]--CVPR2020-HRank:Filter Pruning using High-Rank Feature Map
    Github 重新定义了剪枝规则,从实验效果来看,效率更高 Abstract: 神经网络剪枝为深度神经网络在资源受限设备上的应用提供了广阔的前景。然而,现有的剪枝方法由于缺乏对非显著网络成分的理论指导,在剪枝设计中存在训练效率低、人工成本高的问题。本文通过对高秩特征图的研究,提出了一种新的滤波剪枝方法。我们的HRank的灵感来自于这样一个发现,即由单个过滤器生成的多个特征图的平均秩总是相同的,而不考虑接收到的CNNs图像batch的数量。在此基础上,本文提出了一种用数学方法对低秩特征图进行滤波的方法。我们的剪枝背后的原则是,低秩特征图包含的信息较少,因此剪枝的结果可以很容易地复制。此外,我们还通过实验证明了高秩特征图的权值包含了更多的重要信息,即使不更新一部分,对模型性能的影响也很小。在不引入任何额外约束的情况下,HRank在计算和参数减少方面比现有技术有了显著的改进,并且具有相似的准确性。 Introduction: 当前模型部署除了tensorRT等加速框架外,主要包含了三种模型加速的方法: 1.卷积核压缩 2.参数量化 3.网络剪枝,包含权值剪枝和滤波器剪枝 本文中重点研究了滤波器剪枝来实现模型压缩(减少参数)和加速(减少FLOPs),旨在为低计算能力的设备提供一个通用的解决方案。其中滤波器剪枝可以分为两种: 1.属性重要性:根据CNNs的固有属性对过滤器进行修剪
  • R中的等级和顺序(rank and order in R)
    问题 我在理解R函数rank和R函数order之间的区别时遇到了麻烦。 他们似乎产生相同的输出: > rank(c(10,30,20,50,40)) [1] 1 3 2 5 4 > order(c(10,30,20,50,40)) [1] 1 3 2 5 4 有人可以帮我一下吗? 谢谢 回答1 > set.seed(1) > x <- sample(1:50, 30) > x [1] 14 19 28 43 10 41 42 29 27 3 9 7 44 15 48 18 25 33 13 34 47 39 49 4 30 46 1 40 20 8 > rank(x) [1] 9 12 16 25 7 23 24 17 15 2 6 4 26 10 29 11 14 19 8 20 28 21 30 3 18 27 1 22 13 5 > order(x) [1] 27 10 24 12 30 11 5 19 1 14 16 2 29 17 9 3 8 25 18 20 22 28 6 7 4 13 26 21 15 23 rank返回一个带有每个值“等级”的向量。 在第一个位置的数字是第9个最低的数字。 order返回将初始向量x排序的索引。 x的第27个值是最低的,因此27是order(x)的第一个元素-如果您看一下rank(x) ,则第27个元素是1 。 > x[order
  • TIOBE 编程语言排行榜是什么,它是如何计算编程语言排行的?
    做为一名程序员,都比较关注其使用编程语言的热度,一方面编程语言的热度决定了它拥有多大的市场,另一方面也关系到行业内程序员选择机会有多大。我们总听说某个编程语言排名第一,那么这些数据到底准不准确呢?1.PHP是不是宇宙第一?比如,我们经常会听到一句话:PHP 是宇宙第一编程语言。关于这个问题,我们很容易在 TIOBE 排行榜上得到求证,上图是2002-2019年前10大编程语言排行情况。可以明显看出 PHP 虽然也算是一个比较流行的编程语言,但其历史上就从来没有成为过第一,在 PHP 最巅峰时刻,排名成绩也只能在第三、四名。那么这些数据是从何而来,又是如何计算的呢?我相信每个程序员应该都听说过 TIOBE 这个名字,因为几乎每月都有媒体报道当月 TIOBE 编程语言排行榜,以至于它成为编程语言排行榜领域最权威的组织。所以我一直就在好奇,TIOBE 到底是个什么机构?他们又是如何计算编程语言排行榜的?且听我慢慢道来。2.TIOBE 公司介绍TIOBE 公司成立于 2000年10月1日,由瑞士的公司 Synspace 和一些独立的投资人创建。TIOBE是"The Importance Of Being Earnest"的缩写,该公司主要关注于软件质量的评估。TIOBE 程序设计语言指数是由该公司推出并进行维护的,这个指数将程序设计语言以排名列表的形式提供出来,并且每个月更新一次
  • IPFS官方消息:IPFS矿机厂商排名?FIL挖矿排行榜!
    IPFS官方最新消息:Filecoin矿机厂商排名?ipfs挖矿排行榜!谈起2020年,对任何人来讲都是不同寻常的一年,经历了非常多,许多的实体行业也在这一年承受了非常大的严厉打击,也在这里独特的一年,互联网技术再度展示出了优点,伴随着“新基建”的明确提出,一批然后一批的新起新项目应时而生,在其中最受注目非IPFS-Filecoin莫属了,尽管IPFS-Filecoin明确提出早已并不是刚明确提出的了,可是在2020年的确关注度最大的!在这一年获得了飞快的发展趋势,三年之久,Filecoin主网在2020年10月15日全面启动,任何人关心了三年的Filecoin总算跟大伙儿碰面! 掌握IPFS-Filecoin的盆友都了解,针对大家一般的参加者来讲,关键目地便是为了更好地获得FIL币,那麼获得FIL币的方式有二种:二级市场选购;挖矿机挖矿获得。 矿商企业许多,可是在业界真实能排的上头顶部企业的确是屈指可数,为何一直提议大伙儿挑选头顶部矿商参加呢?这必须大家对Filecoin挖矿有一个清楚的掌握,Filecoin挖矿有别于传统式挖矿,不仅仅是挖矿机在运作就可以获得相对的FIL奖赏的,大家必须充分考虑大家挑选的矿商企业在未来数据储存销售市场的整体规划和是不是有着自身的单独技术性,可否保证 大家的挖矿机平稳运作这些一系列难题的
  • MPI挂在MPI_Send上以发送大消息(MPI hangs on MPI_Send for large messages)
    问题 在c ++ / mpi(mpich2)中有一个简单的程序,它发送一个double类型的数组。 如果数组的大小超过9000,则在调用MPI_Send期间,我的程序挂起。 如果数组小于9000(例如8000),则programm可以正常工作。 源代码如下: main.cpp using namespace std; Cube** cubes; int cubesLen; double* InitVector(int N) { double* x = new double[N]; for (int i = 0; i < N; i++) { x[i] = i + 1; } return x; } void CreateCubes() { cubes = new Cube*[12]; cubesLen = 12; for (int i = 0; i < 12; i++) { cubes[i] = new Cube(9000); } } void SendSimpleData(int size, int rank) { Cube* cube = cubes[0]; int nodeDest = rank + 1; if (nodeDest > size - 1) { nodeDest = 1; } double* coefImOut = (double *) malloc(sizeof
  • 网站排名,有效的SEO标签有哪些,如何用?
    在很长一段时间,对于SEO工作,我们都是围绕提高企业网站排名而展开的,这是毋庸置疑的事情,但这项工作的重任往往来源于网站的内容与链接,通常情况下,对于站内优化的细节,很少进行有效的关注,特别是一些做快排的同学,它认为只要提交给系统就万事大吉,实际上并不是这样,一个网站内部是否达到搜索引擎友好,对于后期的排名,仍然至关重要。 那么,站内有利于SEO排名的“标签”有哪些? 根据以往SEO站内优化的经验,蝙蝠侠IT,将通过如下内容阐述: 1、ALT标签 对于SEO而言,很多时候,内容都是批量制作的很少有人会进行有效的配图,即使是配图也会产生一些随机配图,这对于搜索引擎而言,本身就不不利于搜索结果出图,同时,基本上这样的图片,很少匹配ALT标签。 对于90%的SEO人员都清楚,这样我们就大大降低了图片被搜索引擎抓取的几率,同时,间接的丢失了图片点击所带来的流量。 在此之外,我们在做企业网站的时候,由于企业主对于UI的要求,我们在布局首页的时候,总是会遇到关键词密度不够的情况。 如果你还记得ALT标签,我们可以适当的利用这个标签,填充相关内容,提高词频。 2、H标签 SEO人员做网站经常习惯性的是模仿,虽然这并没有错,但这并不代表一定是对的,很多大型网站忽略H标签的配置,完全基于对方的广告与品牌效应,常常受到搜索引擎的提权。 而对于一般的企业网站,特别是新站,我们对于任何一个页面的配置
  • Spearman相关性和纽带(Spearman correlation and ties)
    问题 我正在根据少量成对排名计算Spearman的rho。 Spearman因无法正确处理领带而闻名。 例如,以2组共8个排名,即使在两组中有6个是平局,相关性仍然很高: > cor.test(c(1,2,3,4,5,6,7,8), c(0,0,0,0,0,0,7,8), method="spearman") Spearman's rank correlation rho S = 19.8439, p-value = 0.0274 sample estimates: rho 0.7637626 Warning message: Cannot compute exact p-values with ties 对于此数据,p值<.05似乎具有很高的统计意义。 R中是否有Spearman的经领带校正的版本? 迄今为止,通过许多联系来计算它的最佳公式是什么? 回答1 好吧, Kendall tau等级相关性也是一种非参数检验,用于检验两个有序(或等级转换)变量之间的统计依赖性-像Spearman的变量一样,但与Spearman的变量不同,它可以处理关系。 更具体地说,存在三个Kendall tau统计信息-tau-a,tau-b和tau-c。 tau-b特别适合处理领带。 tau-b统计量通过除数项处理联系(即,对中的两个成员具有相同的序数值)
  • 如何在R中模拟SQL排名函数?(How to emulate SQLs rank functions in R?)
    问题 什么是R等价于排名函数,例如Oracle ROW_NUMBER() , RANK()或DENSE_RANK() (“根据行的顺序将整数值分配给行”;请参见http://www.orafaq.com/node/ 55)? 我同意,每个功能的功能都可以通过临时方式实现。 但是我主要关心的是性能。 出于内存和速度的考虑,最好避免使用联接或索引访问。 回答1 data.table软件包,尤其是从1.8.1版开始的软件包,提供了SQL方面的分区功能。 rank(x, ties.method = "min")与Oracle RANK()相似,并且有一种使用因子(如下所述)来模仿DENSE_RANK()函数的方法。 最后,一种模仿ROW_NUMBER应该显而易见。 这是一个示例:从R-Forge加载data.table的最新版本: install.packages("data.table", repos= c("http://R-Forge.R-project.org", getOption("repos"))) library(data.table) 创建一些示例数据: set.seed(10) DT<-data.table(ID=seq_len(4*3),group=rep(1:4,each=3),value=rnorm(4*3), info=c(sample(c("a","b"),4
  • 如果条件无法比较负整数和正整数,为什么会这样做?(Why does this if condition fail for comparison of negative and positive integers [duplicate])
    问题 这个问题已经在这里有了答案: if语句中的sizeof()运算符(5个答案) 2年前关闭。 #include <stdio.h> int arr[] = {1,2,3,4,5,6,7,8}; #define SIZE (sizeof(arr)/sizeof(int)) int main() { printf("SIZE = %d\n", SIZE); if ((-1) < SIZE) printf("less"); else printf("more"); } 用gcc编译后的输出是"more" 。 为什么即使在-1 < 8时if条件也会失败? 回答1 问题出在您的比较中: if ((-1) < SIZE) sizeof通常返回一个unsigned long ,因此SIZE将是一个unsigned long ,而-1只是一个int 。 使用C和相关语言进行升级的规则意味着,在比较之前-1将被转换为size_t ,因此-1将成为非常大的正值( unsigned long的最大值)。 解决此问题的一种方法是将比较更改为: if (-1 < (long long)SIZE) 尽管实际上这是毫无意义的比较,但根据定义,无符号值将始终> = 0,并且编译器可能会警告您。 正如@Nobilis随后指出的那样,您应该始终启用编译器警告并注意它们:如果使用gcc -Wall
  • 是否始终将未签名的char提升为int?(Is unsigned char always promoted to int?)
    问题 假设以下内容: unsigned char foo = 3; unsigned char bar = 5; unsigned int shmoo = foo + bar; 是否可以确保将foo和bar值提升为int值以便对表达式foo + bar进行求值-还是允许实现将它们提升为unsigned int ? 在第6.2.5节第8段中: 对于具有相同符号和不同整数转换等级(请参阅6.3.1.1)的任何两个整数类型,具有较小整数转换等级的类型的值的范围是另一种类型的值的子范围。 在第6.2.5节第9段中: 如果int可以表示原始类型的所有值,则该值将转换为int ; 否则,将其转换为unsigned int 。 整数转换等级较小的整数类型的值范围是另一种类型的值的子范围的保证似乎取决于整数类型的正负号。 signed char对应于带signed int unsigned char对应于unsigned int 这是否意味着unsigned char值仅保证在unsigned int的子范围内,而不一定是int ? 如果是这样,这是否意味着一个实现在理论上可以具有一个不在int子范围内的unsigned char值? 回答1 允许将其提升为unsigned int吗? 如果并非所有unsigned char值都可以用int表示,则实现将提升为unsigned int
  • 1085 - House of Cards
    Axel and Birgit like to play a card game in which they build a house of cards, gaining (or losing) credits as they add cards to the house. Since they both have very steady hands, the house of cards never collapses. They use half a deck of standard playing cards. A standard deck has four suits, two are red and two are black. Axel and Birgit use only two suits, one red, one black. Each suit has 13 ranks. We use the notation1R, 2R, ..., 13R, 1B, 2B, ..., 13B to denote ranks and colors. The players begin by selecting a subset of the cards, usually all cards of rank up to some maximum value M
  • 使用MPI_Gather在Fortran中发送2D数组(Sending 2D arrays in Fortran with MPI_Gather)
    问题 我想使用MPI_GATHER发送2d数据块。 例如:如果我有4个节点,则每个节点上都有2x3阵列,如果要在根上有8x3阵列,则要在根上具有8x3阵列。 对于1d数组, MPI_GATHER根据MPI等级对数据进行排序,但是对于2d数据,它会造成混乱! 整理大块的干净方法是什么? 我期望此代码的输出: program testmpi use mpi implicit none integer :: send (2,3) integer :: rec (4,3) integer :: ierror,my_rank,i,j call MPI_Init(ierror) MPI_DATA_TYPE type_col ! find out process rank call MPI_Comm_rank(MPI_COMM_WORLD, my_rank, ierror) if (my_rank==0) then send=1 do i=1,2 print*,(send(i,j),j=1,3) enddo endif if (my_rank==1) then send=5 ! do 1,2 ! print*,(send(i,j),j=1,3) ! enddo endif call MPI_GATHER(send,6,MPI_INTEGER,rec,6,MPI_INTEGER,0,MPI