Salesforce에서 데이터를 검색하는 방법 중 하나가 SOSL(Salesforce Object Search Language) 입니다.
SOSL은 여러 객체의 여러 필드에서 텍스트 검색을 수행할 수 있으며, 특정 단어가 포함된 레코드를 빠르게 찾는 데 유용 합니다.
이번 글에서는 SOSL의 개념, SOQL과의 차이점, 기본 문법, 활용 예제, Apex에서 SOSL 실행하는 방법 등을 알아보겠습니다.
📌 SOSL이란?
SOSL(Salesforce Object Search Language) 은 Salesforce 데이터베이스 내 여러 객체에서 특정 텍스트를 검색하는 데 사용하는 언어 입니다.
SOQL이 특정 객체에서 데이터를 조회하는 것과 달리, SOSL은 여러 객체의 여러 필드에서 특정 텍스트를 검색 할 수 있습니다.
✅ 주요 특징
✔ 다중 객체에서 검색 가능
✔ 텍스트 기반 검색 (단어 또는 문구 검색)
✔ 대소문자 구분 없음
✔ 결과는 여러 객체의 리스트(List of Lists) 형태로 반환
🔎 SOQL vs SOSL 차이점
비교 항목 | SOQL | SOSL |
---|---|---|
검색 범위 | 단일 객체 검색 | 여러 객체에서 검색 가능 |
검색 방식 | 필드 값이 정확히 일치해야 검색됨 | 특정 단어가 포함된 모든 필드 검색 가능 |
WHERE 조건 사용 여부 | ✅ 지원 (WHERE Name=’Test’) | ❌ 미지원 |
데이터 반환 형식 | 개체 리스트(List of SObject) | 여러 개체 리스트(List of Lists of SObject) |
예제 | SELECT Name FROM Account WHERE Name='SFDC Computing' | FIND {SFDC} IN ALL FIELDS RETURNING Account(Name), Contact(FirstName, LastName) |
📌 즉, SOQL은 정확한 데이터 검색에 유용하고, SOSL은 텍스트 기반 검색에 강점이 있음!
📝 SOSL 기본 문법
FIND '검색어' IN 검색범위 RETURNING 객체(필드명)
예제:
FIND {SFDC} IN ALL FIELDS RETURNING Account(Name), Contact(FirstName, LastName)
📌 SOSL 검색 범위 지정 (SearchGroup)
SOSL에서 특정 필드 범위 내에서 검색할 수도 있습니다.
검색 범위 | 설명 |
---|---|
ALL FIELDS | 모든 필드에서 검색 |
NAME FIELDS | 이름 필드에서 검색 |
EMAIL FIELDS | 이메일 필드에서 검색 |
PHONE FIELDS | 전화번호 필드에서 검색 |
SIDEBAR FIELDS | Salesforce 사이드바 검색 범위 |
FIND {Customer} IN NAME FIELDS RETURNING Account(Name), Contact(FirstName, LastName)
📌 SearchGroup을 지정하지 않으면 기본적으로 ALL FIELDS가 사용됨
📝 SOSL 활용 예제
1️⃣ 특정 단어 포함된 데이터 검색
FIND {Wingo} IN ALL FIELDS RETURNING Account(Name), Contact(FirstName, LastName, Department)
📌 SOSL에서 검색어는 반드시 중괄호 {}
로 감싸야 함
📌 Apex 코드 내에서는 작은 따옴표 'Wingo'
로 감싸야 함
2️⃣ SOSL Apex 실행 예제
SOSL 쿼리를 Apex에서 실행하면 여러 개의 객체 리스트를 반환합니다.
String soslFindClause = 'Wingo OR SFDC';
// SOSL 실행: 모든 필드에서 'Wingo' 또는 'SFDC'를 검색
List<List<sObject>> searchList = [FIND :soslFindClause IN ALL FIELDS
RETURNING Account(Name), Contact(FirstName, LastName, Department)];
// 검색 결과를 각 객체 타입으로 변환
Account[] searchAccounts = (Account[])searchList[0]; // Account 리스트
Contact[] searchContacts = (Contact[])searchList[1]; // Contact 리스트
// 계정 정보 출력
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);
}
📌 SOSL 결과는 List<List<SObject>>
형태로 반환됨
📌 각 객체별로 리스트를 분리하여 사용할 수 있음
📌 SOSL에서 구문 바인딩 사용하기
SOSL에서도 Apex 변수 값을 사용할 수 있으며, 콜론(:)을 사용하여 바인딩 합니다.
String searchTerm = 'SFDC';
List<List<SObject>> searchResults = [FIND :searchTerm IN ALL FIELDS RETURNING Account(Name), Contact(FirstName, LastName)];
Account[] accounts = (Account[])searchResults[0];
Contact[] contacts = (Contact[])searchResults[1];
System.debug('🔎 검색된 계정 수: ' + accounts.size());
System.debug('🔎 검색된 연락처 수: ' + contacts.size());
📌 바인딩된 변수는 :searchTerm
처럼 :
기호를 붙여 사용해야 함
🔁 여러 개체에서 데이터 검색
SOSL의 가장 큰 장점은 여러 객체에서 동시에 데이터를 검색 할 수 있다는 점입니다.
FIND {Wingo} IN ALL FIELDS
RETURNING Account(Name, Industry), Contact(FirstName, LastName, Phone), Lead(Company, Email)
📌 여러 객체에서 동시에 검색하고, 각 객체별로 특정 필드를 반환할 수 있음
📌 SOSL을 활용한 대량 데이터 검색
대량 데이터를 검색할 때는 SOQL For Loops 와 마찬가지로 Batch Apex 를 활용해야 합니다.
public with sharing class SOSLBatchSearch {
public static void performSearch(String searchKeyword) {
List<List<SObject>> results = [FIND :searchKeyword IN ALL FIELDS
RETURNING Account(Name), Contact(FirstName, LastName)];
for (List<SObject> sObjects : results) {
for (SObject obj : sObjects) {
if (obj instanceof Account) {
System.debug('🔎 Account Found: ' + ((Account)obj).Name);
} else if (obj instanceof Contact) {
System.debug('🔎 Contact Found: ' + ((Contact)obj).FirstName + ' ' + ((Contact)obj).LastName);
}
}
}
}
}
📌 SOSL 결과를 instanceof
연산자를 사용하여 객체별로 처리 가능
📌 Batch Apex를 사용하면 대량 데이터 검색도 가능
🎯 마무리
✔ SOSL은 다중 객체의 여러 필드에서 텍스트 검색이 가능
✔ SOQL과 달리 WHERE 절을 사용할 수 없으며, 단어 기반 검색만 지원
✔ SOSL 쿼리는 List<List<SObject>>
형태로 반환됨
✔ Apex에서 변수 바인딩을 사용하여 동적 검색 가능
✔ 대량 데이터를 검색할 때는 Batch Apex와 함께 사용해야 함
📌 SOSL을 잘 활용하면 Salesforce 데이터 검색을 더욱 효율적으로 수행할 수 있습니다! 🚀
👉 더 많은 정보를 원한다면 Salesforce 공식 Trailhead 강의를 참고하세요!
🔗 Salesforce SOSL 학습하기