Search (SOSL)

Execute SOSL searches across multiple objects with a fluent search builder.

Execute Search

Go
result, err := client.Search().Execute(ctx, 
    "FIND {Acme} IN NAME FIELDS RETURNING Account(Id, Name), Contact(Id, Name)")

if err != nil {
    log.Fatal(err)
}

for _, record := range result.SearchRecords {
    fmt.Printf("Found: %s (ID: %s)\n", record.Name, record.ID)
}

Search Builder

Build searches programmatically:

Go
// Build a SOSL search query
sosl := search.NewBuilder("Acme").
    In("NAME").
    ReturningWithFields("Account", "Id", "Name", "Industry").
    ReturningWithFields("Contact", "Id", "FirstName", "LastName").
    Limit(20).
    Build()

result, err := client.Search().Execute(ctx, sosl)

Parameterized Search

Go
result, err := client.Search().Parameterized(ctx, search.ParameterizedSearchRequest{
    Query:  "Acme",
    Fields: []string{"Name", "Phone"},
    SObjects: []search.SObjSpec{
        {Name: "Account", Fields: []string{"Id", "Name"}},
        {Name: "Contact", Fields: []string{"Id", "Email"}},
    },
    Limit: 50,
})

Search Scope Options

Scope Description
ALL Search all fields
NAME Search name fields only
EMAIL Search email fields only
PHONE Search phone fields only
SIDEBAR Sidebar search scope

Builder Methods

Method Description
In(scope) Set search scope
Returning(objects...) Objects to return
ReturningWithFields(obj, fields...) Object with specific fields
WithDivision(division) Filter by division
Limit(n) Maximum results