[Salesforce] Apex Basics & Database - SOSL 쿼리 작성하기
2026, Apr 27
목차
SOSL 쿼리 작성하기
https://trailhead.salesforce.com/content/learn/modules/apex_database/apex_database_sosl
SOSL(Salesforce Object Search Language)
- 레코드에서 텍스트 검색을 수행하는 데 사용됨
- Apache Lucene과 유사함
List<List<SObject>> searchList = [FIND 'SFDC' IN ALL FIELDS RETURNING Account(Name), Contact(FirstName,LastName)];
SOQL과 SOSL 비교
- 공통점 : 레코드의 특정 정보 검색 가능
- 차이점 : 한 번에 단일 표준/커스텀 객체만 조회할 수 있는 SOQL과 달리, SOSL은 여러 객체를 조회 가능
SOSL 기본 구문
- 검색 기준 지정
- 검색할 텍스트 표현
- 검색할 필드 범위
- 검색할 객체 및 필드 목록
- 원본 객체에서 행을 선택하기 위한 조건
- 와일드카드 사용 가능 (*, ?)
// Apex 에서 사용 시
FIND 'SearchQuery' [IN SearchGroup] [RETURNING ObjectsAndFields]
// Query Editor, API 사용 시
FIND {SearchQuery} [IN SearchGroup] [RETURNING ObjectsAndFields]
SearchGroup-> 선택 사항 / 아래 값 사용 가능- ALL FIELDS
- NAME FIELDS
- EMAIL FIELDS
- PHONE FIELDS
- SIDEBAR FIELDS
ObjectsAndFields-> 선택 사항 / 지정하지 않으면 모든 객체의 ID값 포함RETURNING에 WHERE절, ORDER BY, LIMIT 사용 가능RETURNING Account(Name, Industry WHERE Industry='Apparel')RETURNING Account(Name, Industry ORDER BY Name)RETURNING Account(Name, Industry LIMIT 10)
Single Words and Phrases
- Single Word - 한 단어는 스페이스, 구두점(?,.,!), 문자-숫자 변환 으로 구분됨
- The Query 조회 시 -> The와 Query가 모두 포함된 레코드 조회 (The SFDC Query Man)
- Phrase - 큰 따옴표
"로 묶인 문자열
SOSL Apex 예시
String soslFindClause = 'Wingo OR SFDC';
List<List<sObject>> searchList = [FIND :soslFindClause IN ALL FIELDS
RETURNING Account(Name),Contact(FirstName,LastName,Department)];
Account[] searchAccounts = (Account[])searchList[0];
Contact[] searchContacts = (Contact[])searchList[1];
System.debug('Found the following accounts.');
for (Account a : searchAccounts) {
System.debug(a.Name);
}
System.debug('Found the following contacts.');
for (Contact c : searchContacts) {
System.debug(c.LastName + ', ' + c.FirstName);
}
Hands-on
-
Name 일치하는 Contact/Lead 조회하기 ````java public class ContactAndLeadSearch {
public static List<List
> searchContactsAndLeads(String name) { System.debug(name); List<List > searchList = [FIND :name IN NAME FIELDS RETURNING Contact(FirstName, LastName), Lead(FirstName, LastName)]; return searchList; }
} ````