选择恰当的搜索解决方案
学习目标
完成本单元后,您将能够:
- 解释何时创建自定义搜索解决方案。
- 描述 SOSL 和 SOQL 之间的差异。
- 确定可用于搜索的 API 协议。
Salesforce 的搜索方式
您知道最常用的 Salesforce 功能是什么吗?搜索才是正确答案。搜索是用户希望在数千条其他数据中找到想要的那条记录的方法。
在此 Trailhead 模块中,您将了解 Salesforce 搜索的工作原理并确定自定义搜索解决方案是否适合您。您还将学习如何针对一些常见用例使用 Salesforce API 快速启动(或重建)自定义解决方案。最后,您将学习如何优化搜索查询以获取更有针对性的相关结果。简而言之,您将对搜索以及如何通过搜索帮助用户提高工作效率有深入的了解。
首先,让我们讨论一下完整搜索的工作原理。
所有记录都作为数据字段存储在组织的数据库中。当您更新或创建记录时,搜索引擎会出现,生成数据的副本,并将内容分解为令牌的小块。我们将这些令牌以及返回原始记录的链接存储在搜索索引中。
从用户的角度来看,搜索流程类似于创建记录的流程。当用户在搜索字段 (1) 中输入一个词时,搜索引擎会将搜索词分解为令牌 (2)。搜索引擎将这些令牌与存储在搜索索引 (3) 中的记录信息进行匹配,按相关性 (4) 对相关记录进行排名,并返回允许用户访问 (5) 的结果。
让我们花点时间思考一下搜索索引。当我们可以搜索组织数据库时,为什么还要费力去生成令牌呢?原因是搜索索引对于返回给用户的结果非常智能。
搜索索引和令牌允许搜索引擎应用高级功能,如拼写更正、昵称、词形还原和同义词组。这意味着,我们可以提供包含用户搜索词变化的记录,以扩大搜索结果范围。(另外,您可能还知道,词形还原与模糊匹配无关。它更多的是识别和返回搜索词的变体,比如搜索结果中的 add、adding 和 added。)
搜索索引还支持将相关性排名引入组合。这是搜索查找用户正在查询记录并对其进行排名的方法。涉及哪些内容呢?如搜索词的频率、顺序和唯一性;记录活动;访问权限;和其他一些因素。
我们来比较一下。对 bunny slippers(兔子拖鞋)的数据库搜索仅返回与兔子拖鞋完全匹配的记录。但是有了搜索索引之后,您会得到含 bunny slippers 的记录。您还会看到相似词的记录,例如 rabbit slippers 或者 bunny slipper(单数)。另外,假设您输入了 slippers bunny 或者 bunny 拼写错误。通过乱序匹配和拼写检查,您仍然可以看到相关结果。并且所有结果都按与执行搜索的特定用户相关的内容进行排序。
也许您在想:开箱即用的 Salesforce 搜索确实听起来很棒(而且确实如此),并且适用于大多数用例。那么,什么时候需要自定义解决方案?
通常,当组织使用自定义 UI 而不是标准 Salesforce UI 时,您需要自定义搜索解决方案。本土化定制 UI 示例是面向客户的知识库或者员工的内部产品数据站点。提醒一句:构建自定义用户界面并不适合所有人,而且需要额外的工作。好处是自定义搜索允许您利用 Salesforce 搜索的一些高级功能。因此,如果您的公司决定构建自定义 UI 并需要自定义搜索时,这个模块就很适合您。
前面已经介绍了 Salesforce Search 101,现在来谈谈如何让您在自定义搜索解决方案中查找记录 API。
通过 API 连接搜索
请记住两种主流 API。(稍后讨论两种额外 API。)
- Salesforce Object Query Language (SOQL)
- Salesforce Object Search Language (SOSL)
给定 API 中的 SOQL 和 SOSL 格式文本查询。但这也是唯一的相似之处。SOQL 查询相当于 SELECT SQL 语句并搜索组织数据库。另一方面,SOSL 是一种针对搜索索引执行基于文本搜索的编程方式。SOSL 使用了前面提到的搜索索引中所有很不错的特性。
SOQL 和 SOSL 有着不同的语法。我们在资源部分包含了指向开发人员文档的链接供您参考。但这里有一些关于何时使用 SOQL 或 SOSL 的指南。
当您知道数据所在的对象或字段,或者想实现以下场景时,请使用 SOQL:
- 从单个对象或多个相互关联的对象中检索数据。
- 计算满足指定条件的记录数。
- 将结果作为查询的一部分进行排序。
- 从数字、日期或复选框字段中检索数据。
当您不知道数据所在的对象或字段,或者想实现以下场景时,请使用 SOSL:
- 检索您知道字段中存在的特定词的数据。由于 SOSL 可以标记一个字段中的多个词并从中构建搜索索引,所以 SOSL 搜索速度更快并且可以返回更多相关结果。
- 有效地检索多个对象和字段,这些对象可能彼此相关,也可能不相关。
- 使用部门功能检索组织中特定部门的数据,并且您希望以最有效的方式找到数据。
现在我们来看看两种其他 API 类型。
首先,建议记录 API。也许您已经通过别名了解过建议记录,分别为自动建议、即时结果或预先输入。您可能也熟悉这种情况。假设您正在使用一个网站,出售最酷的跑步鞋。为自己的知识库使用定制的 Salesforce 搜索解决方案来支持跑步者团体。您想知道为越野跑买哪种鞋。您开始在搜索栏中输入 trail running(越野跑),随即会显示标题中包含搜索词的文章。
搜索框准确地知道您想阅读的内容!
Search Suggested Records 和 Search Suggested Articles REST 方法可供您使用,让您的用户获得同样的即时满意度。稍后我们将为您演示这些方法的使用方式。
我们一直在谈论如何在 Salesforce 中查找记录。但是,如果您在 Salesforce 外部存储了用户的工作访问记录,该怎么办呢?嗯,对这个问题我们也有解决方案:Salesforce 联合搜索。这是用户搜索存储在 Salesforce 外部项目的新方式 — 这些内容还保留在 Salesforce Classic、Salesforce Console 或 Lightning Experience 中。
Salesforce 联合搜索允许您将全局搜索框设为外部搜索引擎。设置联合搜索后,我们将用户的查询传输到外部引擎,通过该引擎搜索外部资源。结果直接在 Salesforce 搜索结果中返回。我们通过 Salesforce 联合搜索连接器执行此操作。该连接器的构建遵循 OpenSearch 规范,因此您可以插入符合此行业标准的任何搜索引擎。
重要的是要知道 Salesforce 联合搜索不通过 Salesforce 搜索索引,这意味着不能应用所有这些很酷的 Salesforce 高级功能。相反,根据外部搜索提供商返回结果,这也很酷。
接下来,让我们来看看如何使用协议发送 SOSL 和 SOQL 查询。
使用协议发送查询
您可以编写所有想要的搜索查询。除非您使用诸如 REST、SOAP 或 Apex 之类的 API 协议来发送查询,否则搜索查询没有任何用处。
记住:某些协议与某些 API 能更好地兼容。一般来说,我们使用 SOQL 进行查询,使用 SOSL 进行搜索。
- Query (REST) 和 query() (SOAP) — 针对指定对象执行 SOQL 查询并返回与指定条件匹配的数据。
- Search (REST) 和 search() (SOAP) — 针对组织的数据执行 SOSL 文本字符串搜索。
还可以使用更多资源来执行其他常见搜索任务,例如自动建议记录、文章和查询。另外,如果您不想使用 SOSL 或 SOQL,请考虑在 REST 中使用参数化搜索。您可以在 URL 中使用参数(即名称),而不是 URL 中的搜索字符串。
对于 Apex,您可以通过将语句括在方括号的方式来动态使用 SOQL 或 SOSL。您还可以使用搜索类来执行动态 SOSL 查询,并使用搜索命名空间来获取搜索结果和建议结果。
我们在本单元的资源部分附加了一个常见列表。我们将在下一个单元中向您介绍如何使用协议,以帮助您快速上手。请务必阅读开发人员文档以获取所有信息和示例。
资源
- SOQL 和 SOSL 引用
- REST API 开发人员指南
- SOAP API 开发人员指南
- Apex 开发人员指南
- Salesforce 帮助
- Federated Search Developer Guide(联合搜索开发人员指南)