【问题标题】:Order SharePoint search results by more columns按更多列对 SharePoint 搜索结果进行排序
【发布时间】:2008-09-18 11:39:48
【问题描述】:

我在 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 search moss


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

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

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

        【讨论】:

          【解决方案4】:

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-03-05
            • 2013-08-19
            • 1970-01-01
            • 2016-01-09
            • 1970-01-01
            • 2012-11-09
            • 1970-01-01
            相关资源
            最近更新 更多