2

我在 SharePoint 2007 (MOSS) 中使用 FullTextSqlQuery,需要按两列对结果进行排序:

SELECT WorkId FROM SCOPE() ORDER BY Author ASC, Rank DESC

但是,返回结果时似乎只考虑了 ORDER BY 的第一列。在这种情况下,结果按作者正确排序,而不是按排名。如果我更改顺序,结果将按排名排序,而不是按作者排序。

我不得不求助于我自己对结果的排序,这我不太喜欢。有没有人解决这个问题?

编辑:不幸的是,它也不接受 ORDER BY 子句中的表达式(SharePoint 抛出异常)。我的猜测是,即使查询看起来像合法的 SQL,它也会在提供给 SQL 服务器之前以某种方式进行解析。

我尝试使用 SQL Profiler 捕获查询,但无济于事。

编辑2:最后我使用了单列排序(在我的例子中是作者,因为它是最重要的)并在结果的前N个代码中进行了第二次排序。对项目来说足够好,但留下了笨拙的代码的不好感觉。

4

4 回答 4

2

微软终于发布了一篇关于这个问题的知识库文章。

“在 SharePoint 搜索查询的 ORDER BY 子句中使用 RANK 时,不应使用其他属性”

http://support.microsoft.com/kb/970830

症状:在 SharePoint 搜索查询的 ORDER BY 子句中使用 RANK 时,结果中仅使用第一个 ORDER BY 列。

原因:RANK 是在全文索引中排名的特殊属性,因此不能与其他托管属性一起使用。

解决方法:不要将多个属性与 RANK 属性结合使用。

于 2009-05-04T13:09:27.787 回答
1

Rank 是 MOSS FullTextSqlQuery 中的一个特殊列,它为每个结果的排名提供一个数值。对于每个查询,该值将不同,并且与特定查询的其他结果相关。因为这个排名应该对每个结果都有一个唯一的值,并且按排名排序然后作者将与仅按排名排序相同。我会尝试对另一列进行排序而不是排名,以查看结果是否按预期返回,如果是这样,您的问题可能与 MOSS 对结果进行排名的方式有关,这对于每个唯一查询都会有所不同。

你也是对的,查询看起来像 SQL,但它不是实际传递给 SQL 服务器的查询,它是特殊的 Microsoft Enterprise Search SQL 查询语法。

于 2008-09-30T18:54:29.627 回答
1

我也遇到了与 FullTextSqlQuery 和 MOSS 2007 相同的问题,其中仅尊重多列“ORDER BY”中的第一列。

我在 SharePoint 搜索的 MSDN 论坛中输入了这个主题,但没有收到任何回复:

http://social.msdn.microsoft.com/Forums/en-US/sharepointsearch/thread/489b4f29-4155-4c3b-b493-b2fad687ee56

于 2009-01-30T18:41:19.117 回答
0

我在 SharePoint 方面没有经验,但如果是只有一个 ORDER BY 子句受到尊重的情况,我会将其更改为表达式而不是列。假设“Rank”是最大值为 10 的数字列,则以下可能有效:

SELECT WorkId FROM SCOPE() ORDER BY AUTHOR + (10 - Rank) ASC
于 2008-09-18T15:20:49.883 回答