按更多列排序SharePoint搜索结果

按更多列排序SharePoint搜索结果,sharepoint,search,moss,Sharepoint,Search,Moss,我正在SharePoint 2007(MOSS)中使用FullTextSqlQuery,需要按两列对结果进行排序: SELECT WorkId FROM SCOPE() ORDER BY Author ASC, Rank DESC 但是,在返回结果时,似乎只考虑ORDER BY中的第一列。在这种情况下,结果是按作者正确排序的,而不是按排名。如果我更改顺序,结果将按排名排序,而不是按作者排序 我不得不求助于我自己的结果排序,我不太喜欢。有人能解决这个问题吗 编辑:不幸的是,它也不接受ORDER

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

SELECT WorkId FROM SCOPE() ORDER BY Author ASC, Rank DESC
但是,在返回结果时,似乎只考虑ORDER BY中的第一列。在这种情况下,结果是按作者正确排序的,而不是按排名。如果我更改顺序,结果将按排名排序,而不是按作者排序

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

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

我试图用SQL事件探查器捕捉查询,但没有成功


编辑2:最后,我使用了按单个列排序的方法(在我的例子中是作者,因为这是最重要的方法),并在结果的前N行代码中进行了第二次排序。对于这个项目来说,它已经足够好了,但是留下了一种混乱代码的坏感觉。

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

SELECT WorkId FROM SCOPE() ORDER BY AUTHOR + (10 - Rank) ASC

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


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

我也遇到了与FullTextSqlQuery和MOSS 2007相同的问题,在这两个查询中,多列“ORDER BY”中只有第一列受到尊重

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

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

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

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

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

解决方案:不要将多个属性与秩属性结合使用