7

我正在使用 SQLServer 2008,如果我执行以下查询:

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

我得到了我期望的行,但排名始终为 0。

寻找这个问题的解决方案,在微软ASP.NET论坛上发现了这个问题,如果我补充一下就可以了:

ALTER FULLTEXT CATALOG MyCatalog REBUILD

我开始获得排名——但只是暂时的。

我不想在每次进行搜索时都重新构建目录,尤其是当我的数据库中有大量数据并且如果我在查询之前直接将其添加到我的 Sproc 时,我的查询无论如何都不会返回任何结果,大概是因为目录已完成重建。似乎有其他人有这个和类似的问题,但我一直无法找到解决方案。有任何想法吗?

4

2 回答 2

3

我在同一个问题上运行,目前接受的答案对我来说不是解决方案。

是的,排名是按照这个答案所说的,但是自从上次目录重建以来已经有一段时间了,这绝不是导致结果不一致的原因。重建后排名不应该发生显着变化,重建后几分钟甚至更少......

freetexttable对我来说,排名存在错误。(不影响containstable排名的Bug:我自己用自己的buggy目录查过,这个微软论坛帖子也有写。)

这个其他微软论坛帖子看来,这个错误只发生在只有很少行索引的目录中。将数据添加到目录会导致错误消失。

所以这是我的答案,取自Pavel Valenta 在另一个 Microsoft 论坛帖子中

如果您的真实目录不会有超过几百行索引,请向您的目录添加一些虚拟表以便索引更多行。

由于查询的构建方式,这不会污染您的结果。是的,这似乎是一个很奇怪的修复。但那是唯一为我解决了麻烦的人。

最后一点:我在使用 sql 2005 sp4 时遇到了这个问题,没有在 2008 中测试过。(问题是针对 2008 年的。)

于 2012-09-24T14:12:25.290 回答
1

排名与查询中返回的其他结果相关,因此仅对根据返回值的相关性进行排序有用。有详细的排名方法信息

于 2010-06-22T21:59:32.963 回答