To return suggestions, enable Salesforce Knowledge. See Salesforce Knowledge Implementation Guide for more information on setting up Salesforce Knowledge.
<apex:page controller="SuggestionDemoController"> <apex:form > <apex:pageBlock mode="edit" id="block"> <h1>Article and Record Suggestions</h1> <apex:pageBlockSection > <apex:pageBlockSectionItem > <apex:outputPanel > <apex:panelGroup > <apex:selectList value="{!objectType}" size="1"> <apex:selectOption itemLabel="Account" itemValue="Account" /> <apex:selectOption itemLabel="Article" itemValue="KnowledgeArticleVersion" /> <apex:actionSupport event="onchange" rerender="block"/> </apex:selectList> </apex:panelGroup> <apex:panelGroup > <apex:inputHidden id="nbResult" value="{!nbResult}" /> <apex:outputLabel for="searchText">Search Text</apex:outputLabel> <apex:inputText id="searchText" value="{!searchText}"/> <apex:commandButton id="suggestButton" value="Suggest" action="{!doSuggest}" rerender="block"/> <apex:commandButton id="suggestMoreButton" value="More results..." action="{!doSuggestMore}" rerender="block" style="{!IF(hasMoreResults, '', 'display: none;')}"/> </apex:panelGroup> </apex:outputPanel> </apex:pageBlockSectionItem> </apex:pageBlockSection> <apex:pageBlockSection title="Results" id="results" columns="1" rendered="{!results.size>0}"> <apex:dataList value="{!results}" var="w" type="1"> Id: {!w.SObject['Id']} <br /> <apex:panelGroup rendered="{!objectType=='KnowledgeArticleVersion'}"> Title: {!w.SObject['Title']} </apex:panelGroup> <apex:panelGroup rendered="{!objectType!='KnowledgeArticleVersion'}"> Name: {!w.SObject['Name']} </apex:panelGroup> <hr /> </apex:dataList> </apex:pageBlockSection> <apex:pageBlockSection id="noresults" rendered="{!results.size==0}"> No results </apex:pageBlockSection> <apex:pageBlockSection rendered="{!LEN(searchText)>0}"> Search text: {!searchText} </apex:pageBlockSection> </apex:pageBlock> </apex:form> </apex:page>
public class SuggestionDemoController { public String searchText; public String language = 'en_US'; public String objectType = 'Account'; public Integer nbResult = 5; public Transient Search.SuggestionResults suggestionResults; public String getSearchText() { return searchText; } public void setSearchText(String s) { searchText = s; } public Integer getNbResult() { return nbResult; } public void setNbResult(Integer n) { nbResult = n; } public String getLanguage() { return language; } public void setLanguage(String language) { this.language = language; } public String getObjectType() { return objectType; } public void setObjectType(String objectType) { this.objectType = objectType; } public List<Search.SuggestionResult> getResults() { if (suggestionResults == null) { return new List<Search.SuggestionResult>(); } return suggestionResults.getSuggestionResults(); } public Boolean getHasMoreResults() { if (suggestionResults == null) { return false; } return suggestionResults.hasMoreResults(); } public PageReference doSuggest() { nbResult = 5; suggestAccounts(); return null; } public PageReference doSuggestMore() { nbResult += 5; suggestAccounts(); return null; } private void suggestAccounts() { Search.SuggestionOption options = new Search.SuggestionOption(); Search.KnowledgeSuggestionFilter filters = new Search.KnowledgeSuggestionFilter(); if (objectType=='KnowledgeArticleVersion') { filters.setLanguage(language); filters.setPublishStatus('Online'); } options.setFilter(filters); options.setLimit(nbResult); suggestionResults = Search.suggest(searchText, objectType, options); } }