在 SharePoint 中自定义搜索结果

了解如何在 SharePoint 中对搜索结果集中的类似项进行分组或删除重复项,从而能够以简明易读的方式显示这些结果。

在搜索结果中,分组会将搜索结果集中的两个或多个类似项折叠起来,以更易于用户阅读的方式显示它们。 删除重复的搜索结果也属于分组操作,即将完全相同或几乎完全相同的项从结果集中删除。 用户稍后可以展开搜索结果集,并查看已折叠的各个结果,具体取决于 SharePoint 管理员设定的设置。

下面的示例展示了如何对搜索结果进行分组:

  • 重复项检测,从结果集中删除几乎完全相同的文档。
  • 网站折叠,仅在结果集中显示在每个网站中找到的最相关项目。
  • 文档集折叠,对于每个 SharePoint 文档库,仅显示其中一个符合搜索条件的项目。

可以通过在 Query 对象模型中使用以下 KeywordQuery 属性,以编程方式指定折叠或重复剪裁的条件:

使用 CollapseSpecification 属性折叠类似的搜索结果

CollapseSpecification 属性可获取 Spec 参数,该参数可以包含多个用逗号或空格分隔的字段,对这些字段进行统一计算即可指定一组折叠条件。

语法CollapseSpecification = Spec

下表列出了 Spec 参数的字段。

表 1. Spec 参数字段

参数中的元素 说明
Spec Subspec(<space>Subspec)*
Subspec Prop(','Prop)*[':'Dups]
Prop 一个有效的托管属性或托管属性的别名。 Prop 不区分大小写。 该托管属性必须可查询并且可排序或可细化。
Dups 一个指定要保留的项目数的整数。 默认值为 1。
<空间> 使用 OR 运算符可组合各个属性。
, 使用 AND 运算符可组合各个属性。
* 表示多个项目。
() or [] 表示可选项目。

如果 Spec 中的字段用逗号分隔,则使用 AND 运算符合并这些字段。 当满足所有指定域条件时,将折叠相关项目。

相反,如果 Spec 中的字段用空格分隔,则使用同时包含 AND 运算符和 OR 运算符的扩展来组合 (或子规范) 的字段。 例如,这样的 Category:3 Product:2 表达式在内部转换为以下表达式,每个表达式 (Category AND Product) OR (Category) 都有一个计数器;因此,前者最多有两个,后者最多三个。 如果匹配某些指定字段,则项目将折叠。

使用 CollapseSpecification 的示例

下表显示了 Contoso 公司的产品目录。 接下来的一组示例使用此目录演示 CollapseSpecification 属性如何工作。

类别 产品 Variant Title
便携计算机 WWI 19W X0196 Black Computer 1
便携计算机 Adventure Works 12 M1201 Red Computer 2
便携计算机 Adventure Works 15.4W M1548 White Computer 3
便携计算机 Proseware 19 X910 Black Computer 4
便携计算机 Proseware Laptop19 X910 Black Computer 5
台式计算机 Adventure Works 2.33 XD233 Silver Computer 6
台式计算机 WWI 2.33 X2330 Black Computer 7
台式计算机 Adventure Works 1.60 ED160 White Computer 8
台式计算机 WWI 3.0 M0300 Silver Computer 9

示例:按 Category 分组

首先,按 Category 对各项进行分组,并显示每组中的前两项(因此为 "Category:2")。 然后,针对每个 Category,显示相应数量的唯一的(因此为"Product:1") Products

语法CollapseSpecification="Category:2 Product:1"

应返回下面的结果。

类别 产品 Variant Title
便携计算机 WWI 19W X0196 Black Computer 1
便携计算机 Adventure 12 M1201 Red Computer 2
台式计算机 Adventure Works 2.33 XD233 Silver Computer 6
台式计算机 WWI 2.33 X2330 Black Computer 7

通过下面的代码可使用 CollapseSpecification 属性折叠搜索结果。

using (var context = new ClientContext("http://localhost"))
{
    var query = new KeywordQuery(context)
        {
            QueryText = "Title:Computer",
            CollapseSpecification = "Category:3 Product:1",
        };

    var executor = new SearchExecutor(context);
    var results = executor.ExecuteQuery(query);

    context.ExecuteQuery();

    foreach (var result in results.Value[0].ResultRows)
    {
        Console.WriteLine(result["Title"]);
    }
}

示例:按 Category 和 Product 进行分组

首先,按 CategoryProduct 对项目进行分组。 然后,显示每种唯一的组合。

语法CollapseSpecification="Category,Product:1"

应返回下面的结果。

类别 产品 Variant Title
便携计算机 WWI 19W X0196 Black Computer 1
便携计算机 Adventure Works 12 M1201 Red Computer 2
便携计算机 Proseware 19 X910 Black Computer 4
台式计算机 Adventure Works 2.33 XD233 Silver Computer 6
台式计算机 WWI 2.33 X2330 Black Computer 7

使用 TrimDuplicates 属性剪裁重复的搜索结果

使用 TrimDuplicates 可指定是否从结果集中剪裁掉重复的搜索结果。 TrimDuplicates 默认设置为 true

如果将 TrimDuplicatesTrimDuplicatesOnPropertyCollapseSpecification(首选)结合使用, TrimDuplicates 将设置为 false

语法TrimDuplicates = <$true | $false>

使用 TrimDuplicatesOnProperty 属性剪裁重复的搜索结果

使用 TrimDuplicatesOnProperty 可指定是否使用非默认托管属性作为剪裁重复项的基础。 默认值为 DocumentSignature 托管属性。 该托管属性必须为 IntegerString 类型。 通过使用表示项目分组的托管属性,您可以使用该功能折叠字段。

语法TrimDuplicatesOnProperty = <managed property>

注意

在 SharePoint 中,尽可能使用 CollapseSpecificationTrimDuplicatesOnProperty 仅适用于向后兼容性方案。

使用 TrimDuplicatesKeepCount 属性修整重复的搜索结果

TrimDuplicates 设置为 true 时,可使用 TrimDuplicatesKeepCount 指定要保留的文档数目。 如果 TrimDuplicates 基于可用作组标识符的托管属性(例如网站 ID),则您可以控制每组返回多少个结果。 所返回的项目在每个组中具有最高动态排名。

语法TrimDuplicatesKeepCount = <number>

使用 TrimDuplicatesIncludeId 属性检索重复的搜索结果

TrimDuplicates 设置为 true,以及 TrimDuplicatesOnPropertyCollapseSpecification 设置为 false 时,可使用 TrimDuplicatesIncludeId 检索文档的重复项。

文档 ID docid 用于检索特定文档的副本。

语法TrimDuplicatesIncludeId = <docid>

注意

FAST Search Server 2010 for SharePoint 中的 fcoid 托管属性已替换为 SharePoint 中的 docid 托管属性。

另请参阅