代码之家  ›  专栏  ›  技术社区  ›  rslite

按更多列排序SharePoint搜索结果

  •  2
  • rslite  · 技术社区  · 17 年前

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

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

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

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

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

    4 回复  |  直到 17 年前
        1
  •  2
  •   mchestnut    17 年前

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

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

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

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

        2
  •  1
  •   Cruiser    17 年前

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

        3
  •  1
  •   mchestnut    17 年前

    一、 同样,我在FullTextSqlQuery和MOSS 2007中也遇到了同样的问题,在这两个版本中,只有多列“ORDER BY”中的第一列得到尊重。

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

        4
  •  0
  •   No AI now No AI ever    17 年前

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

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