5 things about SOSL

Scenario 1: Name Search with __r use

List<List<SObject>> searchList = new List<List<SObject>>();
searchList = [FIND 'University of Arizona' IN ALL FIELDS RETURNING Account(id, Name, pradeep_dani__User_test__r.UserName ORDER BY Name DESC NULLS FIRST)];
List<Account> accList = ((List<Account>)searchList[0]);
for(Account a : accList){
System.debug(a.pradeep_dani__User_test__r.UserName);
}


Output:
lookup objects is User object and the user name of the record will get displayed in the log.



Scenario 2: Data Search(Custom text field search)

List<List<SObject>> searchList = new List<List<SObject>>();
searchList = [FIND 'TestDataSearchKey' IN ALL FIELDS RETURNING Account(id, Name, pradeep_dani__Preferred_Service__c, pradeep_dani__User_test__r.Name ORDER BY Name DESC NULLS FIRST)];
List<Account> accList = ((List<Account>)searchList[0]);
for(Account a : accList){
System.debug(a.pradeep_dani__Preferred_Service__c);
}

Output:
Custom field has "TestDataSearchKey", same will be dispplayed in the log.




Scenario 3.
Object must be searchable to use SOSL.




Scenario 4. 
"UserRecordAccess.HasRecordAccess" these fields are not allowed in SOSL.




Scenario 5. 
Time take to SOQL is 40-60ms then SOSL will take approximately 800-900msms

List<List<SObject>> searchList = new List<List<SObject>>();
searchList = [FIND '*00*' IN ALL FIELDS RETURNING Account (Id, Name LIMIT 2000)];
List<Account> resList = ((List<Account>)searchList[0]);
System.debug('**SOSL Count:' + resList.size());
List<Account> resList2 = [SELECT Id, Name FROM Account WHERE Name like '%00%' LIMIT 2000];
System.debug('**SOQL Count:' + resList2.size());

Comments