我正在使用SQLServer 2008,如果我执行以下查询:
SELECT
*
FROM
FREETEXTTABLE(SomeTable, Name, 'a name that I know exists')
我得到了我期望的行,但等级总是为0。
在Microsoft ASP.NET论坛上搜索此问题的解决方案I found this question,确定如果我添加:
ALTER FULLTEXT CATALOG MyCatalog REBUILD
我开始获得排名 - 但只是暂时的。
我不想每次进行搜索时都要重建我的目录,特别是当我的数据库中有大量数据时,如果我在查询之前直接将它添加到我的Sproc中,我的查询无论如何都不会返回结果,大概是因为目录已经完成了重建。似乎有其他人有这个和类似的问题,但我一直无法找到解决方案。有什么想法吗?
答案 0 :(得分:3)
我在同一个问题上运行,currently accepted answer对我来说不是解决方案。
是的,排名是按照这个答案所说的完成的,但是自上次目录重建以来已经有一段时间没有出现结果不一致的原因。在重建之后,排名不应该发生显着变化,重建后几分钟内也不会发生变化...
对我来说,freetexttable
排名中存在一个错误。 (不影响containstable
排名的错误:我自己使用自己的错误目录进行了检查,并且也写在this Microsoft forum post上。)
从this other Microsoft forum post看来,这个错误似乎只发生在只有很少行索引的目录中。将数据添加到目录会导致错误消失。
所以这是我的回答,取自Pavel Valenta on yet another Microsoft forum post:
如果您的真实目录索引的行数不会超过几百行,请在目录中添加一些虚拟表,以便将更多行编入索引。
由于构建查询的方式,这不会污染您的结果。是的,这似乎是一个奇怪的修复。但那是唯一一个为我解决麻烦的人。
最后一点说明:我在使用sql 2005 sp4时出现此问题,未在2008年进行测试。(问题是针对2008年。)
答案 1 :(得分:1)
排名与查询中返回的其他结果相关,因此仅用于对返回值的相关性进行排序。有detailed information on the ranking method。