按更多列排序SharePoint搜索结果

时间:2008-09-18 11:39:49

标签: sharepoint search moss

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

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

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

我不得不依靠自己对结果进行排序,我不太喜欢。有没有人解决这个问题?

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

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

编辑2 :最后我使用单列排序(在我的情况下是作者,因为它是最重要的)并且在结果的TOP N上的代码中进行了第二次排序。对项目来说工作得足​​够好,但却留下了不好的代码感觉。

4 个答案:

答案 0 :(得分:2)

Microsoft 最终发布了有关此问题的知识库文章。

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

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

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

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

解决方案:不要将多个属性与RANK属性一起使用。

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

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

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

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

答案 3 :(得分:0)

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

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