Skip to main content

为常见用例构建搜索

学习目标

完成本单元后,您将能够:

  • 描述搜索单个对象的方式。
  • 解释搜索多个对象的方式。
  • 描述搜索自定义对象的方式。

在 Cloud Kicks 工作

假设您在一家发展势头强劲的公司 Cloud Kicks 担任新明星开发人员。该公司制作超舒适、时尚和环保的定制运动鞋,深受专业跑步者和周末运动者的欢迎。

您的任务是为 Cloud Kicks 员工创建面向客户的在线知识库和内部产品网站。所有数据都源于 Cloud Kicks Salesforce 组织。看起来像是定制搜索解决方案的工作,不是吗?在该场景下,我们先了解几个自定义搜索解决方案的常见用例。讨论为什么要使用特殊用例,然后给出一些示例。

搜索单个对象

Cloud Kicks 是一家正值成长期的初创公司,营销部门也在努力宣传推广。他们启动了多个市场活动,并通过 Salesforce 进行跟踪。营销部门要求提供一种仅在您负责的内部产品网站上搜索市场活动的方法。单个对象搜索最适合在用户需要快速搜索一种记录类型时使用,因为他们不想陷入筛选不适用记录的泥潭。

使用 SOSL 在单个对象中进行搜索时,只需在请求中指定该对象即可。就是这么简单。

FIND {term} RETURNING ObjectTypeName

在本示例中,用户输入的对象是 termObjectTypeName 将搜索结果限制为仅包含指定的 sObject。因此,如果用户想要查找 2016 年 3 月的电子邮件市场活动,请求如下:

FIND {march 2016 email} RETURNING Campaign

我们将为您介绍使用 RETURNING 能做哪些很酷的事情,以及如何在下一个单元中优化搜索以获得最佳结果。

搜索多个对象

Cloud Kicks 向来秉持以客户为中心的理念。它希望建立一站式服务,供用户在其网站上提问和分享信息。包括多种类型的信息:视频、文章、问题和 PDF。但是用户关心的并不是信息呈现的内容类型。他们只关心是否能快速获取所需的信息。这就是多个对象搜索的好处:您可以同时搜索多个对象,因为记录的类型对用户来说并不重要。或者,用户实际上希望在结果中看到多个对象类型。

幸好在 SOSL 中添加另一个对象也非常简单。只需添加一个逗号分隔的列表。

FIND {term} RETURNING ObjectTypeName1, ObjectTypeName2, ObjectTypeNameYouGetTheIdea

回到我们的场景,一位 Cloud Kicks 客户想知道是否有鞋子是由回收材料制成的。您设置了在线知识库搜索,以便在结果中返回多个与搜索词匹配的对象。

FIND {recycled materials} RETURNING Product2, ContentVersion, FeedItem

请记住,如果 RETURNING 元素中未指定任意对象,则结果中不会出现对象。

搜索自定义对象

Salesforce 包含许多可供客户使用的标准对象。但是 Cloud Kicks 是关于定制鞋的,所以它也需要定制对象。您最感兴趣的当属最新的自定义对象 Merchandise(商品)。此对象包含有关 Cloud Kicks 提供的所有产品的样式、ID、颜色、材料、名称和价格的信息。Cloud Kicks 内部很多人需要访问这些信息,包括支持、销售和发货。

对于正在构建的内部产品网站,您添加了一个仅搜索 Merchandise(商品)自定义对象的搜索框。在 SOSL 搜索中指定自定义对象没有什么特别的方法。像任何其他标准对象一样包含 sObject 名称,并附加一个 __c 后缀。

FIND {pink hi\-top} RETURNING Merchandise__c

SOQL

我们已经讨论了 SOSL,但 SOQL 呢?当您知道要搜索的字段,搜索词与该字段完全匹配(不是部分或无序匹配),需要数字、日期或复选框字段数据,或者只查找几个结果的情况下,您可以使用 SOQL 进行单对象搜索数据。(有关何时使用 SOQL 的完整列表,请参阅上一个单元。)

查看本模块中前面的常用用例,您可能已经注意到使用 SOQL 的一些危险标志。例如:

  • 单对象搜索 — 当您知道数据所在的字段时,SOQL 就起作用了。不需要为 march 2016 email(2016 年 3 月邮件)指定字段,这就是 SOSL 搜索比 SOQL 更受欢迎的原因。通常,如果查询未指定要搜索的目标字段,则 SOSL 会起作用。
  • 多对象搜索 — 您只能从相互关联的多个对象中检索数据,所以 SOQL 中的多对象搜索具有局限性。在这个场景中,对象是不相关的,所以使用 SOSL。
  • 自定义对象搜索 — 与单个对象搜索一样,您可以很好地搜索 SOQL 中的自定义对象。但是,我们并没有为搜索词 pink hi-top(粉色高帮鞋)指定数据所在的字段。此外,SOQL 搜索的是数据库,而不是索引。因此,我们假设记录中实际上包含了 pink sneaker hi-top(粉色高帮运动鞋)。SOQL 没有返回正确结果。
在 Salesforce 帮助中分享 Trailhead 反馈

我们很想听听您使用 Trailhead 的经验——您现在可以随时从 Salesforce 帮助网站访问新的反馈表单。

了解更多 继续分享反馈