Salesforce

[세일즈포스] What is SOSL?( SOSL 사용법 및 예제, SOQL과 SOSL 차이)

송테이토 2023. 2. 12. 17:32

SOSL 쿼리 작성하기

Apex 기본 및 데이터베이스

💡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

  1. 여러 개체에서 필드를 검색

  1. 단어일치를 기반으로 필드 일치
  2. 예) SOSL에서 'Digital'을 검색하면 필드 값이 'Digital' 또는 'The Digital Company'인 레코드가 반환

SQQL

  1. 한번에 하나의 표준 또는 맞춤형 객체만 쿼리할 수 있음
  2. 정확히 일치해야함비슷해보이지만 두 개는 다른 언어이다!
  3. 예) 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 → 로컬변수 참조! 바인딩

 

해당되는 결과를 반환