我在 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 ​​个代码中进行了第二次排序。对于该项目来说已经足够好了,但留下了代码混乱的坏感觉。

有帮助吗?

解决方案

微软 最后 发布了有关此问题的知识库文章。

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

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

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

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

解决:请勿将多个属性与 RANK 属性结合使用。

其他提示

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

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

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

我在 SharePoint 搜索的 MSDN 论坛中输入了此主题,但尚未收到任何回复:

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

我没有使用 SharePoint 的经验,但如果只遵守一个 ORDER BY 子句,我会将其更改为表达式而不是列。假设“Rank”是一个最大值为 10 的数字列,则以下内容可能有效:

SELECT WorkId FROM SCOPE() ORDER BY AUTHOR + (10 - Rank) ASC
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top