Optimize Search Results

Learning Objectives

After completing this unit, you’ll be able to:

  • Describe how to create efficient text searches that return more targeted search results.
  • Describe how to create auto-suggest functionality for searches.
  • List more actions that admins can take to enhance search results for users.

Create Efficient Text Searches

Search queries can be expensive. The more data you’re searching through and the more results you’re returning, the more you can slow down the entire operation.

How do you combat sluggish searches? By defining lean, mean, search-querying machines. Two basic strategies are at play here.

  • Limit which data you’re searching through
  • Limit which data you’re returning

But you don’t want to go too far. If you’re too efficient, the search is less useful. Users don’t like it when they see record not found when they know that the record exists. You don’t want to see users when they are angry.

Here are our recommendations to create a happy medium. Let’s start with a SOSL example to understand the basic concepts.

To limit which data is searched, use IN SearchGroup. You can search for name, email, phone, sidebar, or all fields. For example, if you want to search only for an email, you search through only email fields.

FIND {jsmith@cloudkicks.com} IN EMAIL FIELDS RETURNING Contact

Now let’s talk search results. Yes, users think they want to see ALL THE RESULTS! But if you have thousands of records, it’s time to reconsider that stance. Think about how you could limit the results or at least break them up into smaller, easier-to-digest chunks.

Again, turning to SOSL, you can use RETURNING FieldSpec to specify which data is returned. We used it in the last unit, but let’s talk about the more advanced (read: awesome) elements it includes.

  • ObjectTypeName—Specifies the object to return.
  • FieldList—Specifies the fields to return.
  • ORDER By—Specifies which fields to order the results by. You can also specify ascending or descending order.
  • LIMIT n—Sets the maximum number of records returned for the given object.
  • OFFSET n—Sets the starting row offset into the result set returned by your query.

That’s a lot to take in. Let’s go through it step-by-step.

Step Goal Example
1 Specify the object to return.
FIND {Cloud Kicks} RETURNING Account
2 Specify the field to return.
FIND {Cloud Kicks} RETURNING Account(Name, Industry)
3 Order the results by field in ascending order, which is the default.
FIND {Cloud Kicks} RETURNING Account (Name, Industry ORDER BY Name)
4 Set the max number of records returned
FIND {Cloud Kicks} RETURNING Account (Name, Industry ORDER BY Name LIMIT 10)
5 Set the starting row offset into the results.
FIND {Cloud Kicks} RETURNING Account (Name, Industry ORDER BY Name LIMIT 10 OFFSET 25)

Now that you’re getting the hang of this, let’s try out some WITH statements, which filter records by certain predefined fields. By prefiltering results, you return fewer results and improve performance. Plus, users don’t need to wade through as many results. You might be asking: What types of WITH filters does SOSL offer? Well, here they are:

Resource Example
WITH DIVISION
FIND {Cloud Kicks} RETURNING Account (Name, Industry)
    WITH DIVISION = 'Global'
WITH DATA CATEGORY
FIND {race} RETURNING KnowledgeArticleVersion
    (Id, Title WHERE PublishStatus='online' and language='en_US')
    WITH DATA CATEGORY Location__c AT America__c
WITH NETWORK
FIND {first place} RETURNING User (Id, Name),
FeedItem (id, ParentId WHERE CreatedDate = THIS_YEAR Order by CreatedDate DESC)
WITH NETWORK = '00000000000001'
WITH PRICEBOOK
Find {shoe} RETURNING Product2 WITH PricebookId = '01sxx0000002MffAAE'

Starting to get the picture? Seems like you’re ready to tackle how this works in SOQL. The good news is that it’s pretty much the same. SOQL has similar syntaxes under SELECT that accomplish the same thing as SOSL. The full list of syntaxes, including how to limit by data category or network, is in the developer docs. Here’s a handy comparison table of some of the syntaxes that we discussed.

I want to... SOSL SOQL
Limit the data that is searched IN SearchGroup WHERE
Specify the data to be returned in the response Returning FieldSpec SELECT
Sort results ORDER BYLIMITOFFSET ORDER BYLIMITOFFSET
Filter by data category WITH DATA CATEGORY WITH DATA CATEGORY

Display Suggested Results

Remember all the way back in the first unit when we talked about record auto-suggestion and the finer art of searching for information about trail running? Let’s revisit that concept in a little more detail.

As a refresher, you can use APIs so that suggestions appear as the user types into the search bar. Suggestions return records that have a title that matches what the user is typing. This feature gets your users to where they want to go faster, which is the whole goal of search, isn’t it?

To take advantage of this feature, here are your go-to REST resources. Each resource has similar syntax and parameters, but use the one that best fits your use case.

  • Search Suggested Records—Returns a list of suggested records whose names match the user’s search string. The suggestions resource provides a shortcut for users to navigate directly to likely relevant records, before performing a full search.
  • Search Suggested Article Title Matches—Returns a list of Salesforce Knowledge articles whose titles match the user’s search query string. Provides a shortcut to navigate directly to likely relevant articles before the user performs a search.
  • SObject Suggested Articles for Case—Returns a list of suggested Salesforce Knowledge articles for a case.

Let’s use the Search Suggested Article Title Matches option as an example of how suggestion works. Here’s the basic syntax, but check out the API docs for the full list of parameters available.

/vXX.X/search/suggestTitleMatches?q=search string&language=article language&publishStatus=article publication status

Now we use that syntax but with a specific example. The request looks like the following.

/vXX.X/search/suggestTitleMatches?q=race+tips&language=en_US&publishStatus=Online

And the JSON response.

{
  "autoSuggestResults" : [ {
    "attributes" : {
    "type" : "KnowledgeArticleVersion",
    "url" : "/services/data/v30.0/sobjects/KnowledgeArticleVersion/ka0D00000004CcQ"
    },
  "Id" : "ka0D00000004CcQ",
  "UrlName" : "tips-for-your-first-trail-race",
  "Title" : "race tips",
  "KnowledgeArticleId" : "kA0D00000004Cfz",
  "isMasterLanguage" : "1",
  } ],
  "hasMoreResults" : false
}

Work with Admins

Optimizing search results is a team sport. Luckily, you know the best person for the assist: your MVP admin. Here’s the play for winning some easy points on enhancing search results by working with your admin.

The first step is setting up and optimizing synonym groups, which have words or phrases that are treated equally in searches. A search for one term in a synonym group returns results for all terms in the group. For example, a search for USB returns results for all terms in the synonym group, which contains USB, thumb drive, flash stick, and memory stick. You’re probably seeing the value of synonym groups already. Users can search using one term and still get the results they want even if they don’t use the “right” search term. No renaming of products required.

So where do you start when setting up synonym groups? We’ll let you in on a few not-so-well-kept secrets. First, to edit synonym groups from Setup, enter Synonyms in the Quick Find box, then select Synonyms. Have tons of synonyms (9,586 to be exact) to import? Take advantage of the metadata API listed in the references section. Bulk upload for the win.

Now that you’ve got synonym groups handled, the next step is promoted search terms for Knowledge articles.

Promoted search terms are useful for getting more eyeballs on an article that you know is commonly used to resolve a support issue. Getting it set up is simple. Admins find the perfect article and then add terms to the Promoted Search Terms related list. Users who enter those keywords see the chosen article at the top in search results.

For example, your support team has crafted the absolutely perfect article on how to return shoes that don’t fit. It’s the Mona Lisa of support articles. The admin goes in and updates that article to include promoted search terms of return and doesn’t fit. When users search for those terms, the article pops up.

A couple things to help your admin fine-tune promoted search terms.

  • The maximum number of characters per term is 100. For best results when matching users’ search terms, limit each promoted term to a few keywords.
  • Don’t go overboard. For best results, use them selectively, which means create a limited number of promoted terms and a limited number of promoted articles per term. Adding too many promoted search terms could affect the relevance ranking for users, leading to unwanted results. Your organization can create a maximum of 2,000 promoted terms.
  • Article search matches a promoted term whenever all keywords within the term occur within the user’s search terms, in any sequence. Each keyword must match exactly.

Let’s Wrap This Up

Search might not be the most glamorous of Salesforce features, but it’s the most used.

Hopefully, over the previous few units, you’ve grown to understand—dare we say to appreciate?—the power behind it. You’ve learned the architecture of search, how to build search solutions for some common use cases, and how to create efficient search queries. Now go ahead and build a search that dazzles users, even if they don’t realize it. Become a stealthy search ninja.

retargeting