我使用的是SQLServer 2008,如果我执行以下查询:
SELECT
*
FROM
FREETEXTTABLE(SomeTable, Name, 'a name that I know exists')我得到了我期望的行数,但排名始终为0。
在寻找这个问题的解决方案时,我在微软ASP.NET论坛上使用了I found this question,当然,如果我添加了:
ALTER FULLTEXT CATALOG MyCatalog REBUILD我开始获得一个排名--但只是暂时的。
我不希望每次执行搜索时都必须重建目录,特别是当我的数据库中有大量数据,并且如果我直接在查询之前将其添加到Sproc中时,我的查询无论如何都不会返回任何结果,这可能是因为目录已经完成了重建。似乎有其他人有这个和类似的问题,但我一直无法找到解决方案。有什么想法吗?
发布于 2010-06-23 05:59:33
排名是相对于查询中返回的其他结果的,因此只适用于根据返回值的相关性进行排序。这就是detailed information on the ranking method。
发布于 2012-09-24 22:12:25
我也遇到了同样的问题,而currently accepted answer对我来说不是一个解决方案。
是的,排名就像这个答案所说的那样,但这不能成为自上次目录重建以来已经有一段时间的结果不一致的原因。排名不应该在重建时发生显著变化,甚至在重建后几分钟内也不会发生显著变化。
对我来说,freetexttable排名有个bug。(不影响containstable排名的错误:我自己用自己的错误目录检查过它,它也是在this Microsoft forum post上写的。)
从this other Microsoft forum post看来,这个错误似乎只发生在只有很少的索引行的目录中。向目录中添加数据会导致错误消失。
下面是我的答案,摘自Pavel Valenta on yet another Microsoft forum post
如果您的实际目录不会有超过几百行的索引,请向您的目录添加一些虚拟表,以便索引更多的行。
这不会因为构建查询的方式而影响您的结果。是的,这似乎是一个相当奇怪的修复方法。但这是唯一一个为我解决了麻烦的人。
最后要注意的是:我在使用SQL2005 sp4时遇到了这个问题,没有在2008上测试过。(这个问题是针对2008年的。)
https://stackoverflow.com/questions/3097166
复制相似问题