SOSL语句结构如下

FIND {SearchQuery}
[ IN SearchGroup ]
[ RETURNING FieldSpec [[ toLabel(fields)] [convertCurrency(Amount)] [FORMAT()]] ]
[ WITH DivisionFilter ]
[ WITH DATA CATEGORY DataCategorySpec ]
[ WITH SNIPPET[(target_length=n)] ]
[ WITH NETWORK NetworkIdSpec ]
[WITH PricebookId ]
[ WITH METADATA ]
[ LIMIT n ]
[ UPDATE [TRACKING], [VIEWSTAT] ]

我们基于这个内容分开来看

语句 描述 备注
FIND 来指定要搜索的单词或短语。一个搜索查询包括字面的单词或
短语,也可以包括通配符和逻辑运算符(AND, OR, 和 AND NOT)。 FIND是必填字段,类似于SOQL中where 某个字段为什么值的功能
IN 在SOSL查询中,你可以使用IN 可选子句指定要搜索的文本字段类型。例如,你可以搜索姓名、电子邮件、电话、侧边栏或所有字段。search group包含的内容查看下述表格。 这个通常用于你想搜索的内容已经知道哪个类型中搜索,比如想要搜索 Account, Opportunity所有Name中包含 Zhang san的,就可以设置IN NAME FIELDS
RETURNING 搜索结果中要返回的信息。一个或多个对象的列表;在每个对象中,一个或多个字段的列表。举个例子:下面的例子用来返回Contact表的 FirstName以及LastName和Account以及Lead的FirstName FIND {test} RETURNING Contact(FirstName, LastName),
Account, Lead(FirstName) 最多只能搜索2000条
WHERE 对结果集进行过滤。返回基于指定条件的数据。必须包括一个至少有一个指定的
字段。下面的例子并不是正确的语法。RETURNING Account (WHERE name like 'test') 下面的例子是正确的: RETURNING Account (Name, Industry WHERE Name like 'test')
WITH 当Affected by Divisions权限开启时,可以基于Divisions进行搜索
WITH DATA CATEGORY 仅用于salesforce的Knowledge Article以及Question表,可以进行Data Category进行过滤
WITH SNIPPET 用于article, case, feed, 以及 idea搜索。在搜索结果页面上,文章标题下面的摘录显示了与搜索查询相匹配的术语,并在周围文本的背景中突出显示。
WITH NETWORK 针对 Community Cloud环境,基于Community Cloud Id进行过滤
WITH PriceBookId 针对Product表,基于PriceBook进行过滤
WITH METADATA 指定返回的结果集中是否返回METADATA信息
LIMIT 设置返回的数据量

search group包含以下内容

Search Group Description
ALL FIELDS 搜索所有的可搜索的字段,这个也是默认的选项,如果SOSL中没有IN关键字,就搜索全部
EMAIL FIELDS 搜索所有的 Email字段
NAME FIELDS 只能搜索标准/自定义表的Name字段。除此以外,还支持以下字段:Account: Website, Site, NameLocal
Asset: SerialNumber
Case: SuppliedName, SuppliedCompany, Subject
Contact: AssistantName, FirstNameLocal, LastNameLocal, AccountName
Event: Subject
Lead: Company, CompanyLocal, FirstNameLocal, LastNameLocal
Note: Title
PermissionSet: Label
Report: DescriptionTagDefinition: NormName
Task: Subject
User: CommunityNickname
PHONE FIELDS 只能搜索 Phone类型字段
SIDEBAR FIELDS 搜索侧边栏下拉列表中所列的有效记录。

SOSL语句分析

SOSL语句 描述
FIND {test} 系统中搜索所有test内容,返回匹配数据的ID信息
FIND {MyProspect AND ("John Smith" OR MyCompany)} 系统中搜索包含 John Smith 或者 My Company并且 MyProspect内容,返回匹配数据的ID信息
FIND {[email protected]} IN EMAIL FIELDS 在所有的 Email类型字段中搜索[email protected],返回匹配的数据的ID的信息
FIND {Joe Smith} IN Name Fields RETURNING lead 返回Lead表中的ID信息,条件为Name字段包含 Joe Smith
FIND {Joe Smith}
IN Name Fields
RETURNING lead(name, phone) 返回Lead表中的Name以及Phone字段,条件为Name字段包含Joe Smith
FIND {MyProspect} RETURNING Contact(FirstName, LastName LIMIT 20), Account(Name, Industry LIMIT 10), Opportunity LIMIT 50 搜索 MyProspect,返回匹配的 Contact的FirstName以及LastName,最多只返回20条;返回匹配的Account的Name和Industry,最多只返回10条,返回Opportunity,三个表最多只返回50条
FIND {test}
RETURNING Account (id WHERE xx__c = 'AAA') 搜索 test,返回匹配的Account数据,Account数据要求 xx__c为AAA

注:

  1. 上述的FIND是通过花括号{} 来匹配,在 apex class中,需要使用单引号 ‘ 来进行匹配。
  2. SOSL最多只能返回2000条数据