SOSL 쿼리 작성하기
💡SOSL 시작하기
SOSL(Salesforce Object Search Language)은 레코드에서 텍스트 검색을 수행하는 데 사용되는 Salesforce 검색 언어입니다
예)'SFDC'라는 단어가 포함된 필드가 있는 계정 및 연락처를 검색하는 SOSL
List<List<SObject>> searchList = [FIND 'SFDC' IN ALL FIELDS
RETURNING Account(Name), Contact(FirstName,LastName)];
💡SOQL과 SOSL의 차이점
공통점은 SOQL과 마찬가지로 조직의 레코드에서 특정 정보를 검색할 수 있음!
SOSL
- 여러 개체에서 필드를 검색
사
- 단어일치를 기반으로 필드 일치
- 예) SOSL에서 'Digital'을 검색하면 필드 값이 'Digital' 또는 'The Digital Company'인 레코드가 반환
SQQL
- 한번에 하나의 표준 또는 맞춤형 객체만 쿼리할 수 있음
- 정확히 일치해야함비슷해보이지만 두 개는 다른 언어이다!
- 예) SOQL은 필드 값이 'Digital'인 레코드만 반환
💡예제
1) 특정 단어 조건 찾기
FIND {Wingo} IN ALL FIELDS RETURNING Account(Name), Contact(FirstName,LastName,Department)
⭐중요!⭐
쿼리 편집기 및 API의 검색 쿼리는 중괄호{Wingo}로 묶음
Apex에서 검색 쿼리는 작은따옴표'Wingo'로 묶음
FIND 'SearchQuery' [IN SearchGroup] [RETURNING ObjectsAndFields]
FIND {SearchQuery} [IN SearchGroup] [RETURNING ObjectsAndFields]
1. 여기서 SearchQuery는 검색할 텍스트
SearchQuery에는 두 가지 유형의 텍스트가 포함
- Single Word - 단일 단어(예: test 또는 hello)를 나타냅니다. SearchQuery의 단어는 공백, 구두점 및 문자에서 숫자(또는 그 반대로)로 변경으로 구분됩니다. 단어는 항상 대소문자를 구분하지 않습니다.
- Phrase - “josh smith”와 같이 큰따옴표로 묶인 단어 및 공백 모음을 나타냅니다. 여러 단어를 논리 및 그룹화 연산자와 함께 결합하여 보다 복잡한 쿼리를 형성할 수 있습니다.
⭐중요!⭐
텍스트 검색은 대소문자를 구분하지 않습니다. 예를 들어 Customer , customer 또는 CUSTOMER 모두 동일한 결과를 반환
2. SearchGroup은 선택 사항이며 검색할 필드의 범위
지정안하면 → 검색범위 모든 필드
- ALL FIELDS
- NAME FIELDS
- EMAIL FIELDS
- PHONE FIELDS
- SIDEBAR FIELDS
3. ObjectsAndFields는 선택 사항
지정안하면 → 검색결과 발견된 모든 개체 ID 포함
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]; //계정 배열
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);
}
:soslFindClause → 로컬변수 참조! 바인딩