Skip to main content

SOSL 쿼리 작성

학습 목표

이 유닛을 완료하면 다음을 수행할 수 있습니다.
  • SOSL과 SOQL의 차이점을 설명할 수 있습니다.
  • SOSL 쿼리를 사용하여 여러 개체에서 필드를 검색할 수 있습니다.
  • Developer Console에서 쿼리 편집기를 사용하여 SOSL 쿼리를 실행할 수 있습니다.
참고

참고

한국어로 학습하시겠어요? Trailhead playground에서 한국어로 실습 과제를 시작하고, 괄호 안에 제공된 번역을 사용해 탐색해 보세요. 영어 데이터를 기반으로 실습 과제 검증이 이루어지므로 영문으로 표시된 값만 복사해 붙여 넣습니다. 한국어 조직에서 실습 과제를 통과하지 못한 경우, (1) 로캘을 미국을 바꾸고 (2) 여기에 제시된 지침에 따라 언어를 영어로 바꾼 후 (3) "Check Challenge(과제 확인)" 버튼을 눌러 다시 진행해 보세요.

원하는 언어로 Trailhead 사용하기 뱃지를 확인해 현지화된 Trailhead 경험을 활용하는 방법에 대해 자세히 알아보세요.

SOSL 시작하기

SOSL(Salesforce Object Search Language)은 레코드에서 텍스트 검색을 수행하는 데 사용되는 Salesforce 검색 언어입니다. SOSL을 사용하여 Salesforce의 여러 표준 및 사용자 정의 개체 레코드에서 필드를 검색합니다. SOSL은 Apache Lucene과 유사합니다.

Apex에 SOSL 쿼리를 추가하는 것은 간단합니다. SOSL 쿼리를 Apex 코드에 직접 포함할 수 있습니다. SOSL이 Apex에 내장된 경우 인라인 SOSL을 참조합니다.

다음은 'SFDC'라는 단어가 포함된 필드가 있는 계정 및 연락처를 검색하는 SOSL 쿼리의 예입니다.
List<List<SObject>> searchList = [FIND 'SFDC' IN ALL FIELDS 
                                      RETURNING Account(Name), Contact(FirstName,LastName)];

SOQL과 SOSL의 차이점과 유사점

SOQL과 마찬가지로 SOSL을 사용하면 조직의 레코드에서 특정 정보를 검색할 수 있습니다. 한 번에 하나의 표준 또는 사용자 정의 개체만 쿼리할 수 있는 SOQL과 달리 단일 SOSL 쿼리는 모든 개체를 검색할 수 있습니다.

또 다른 차이점은 SOSL은 단어 일치를 기반으로 필드를 일치시키는 반면 SOQL은 기본적으로 정확히 일치를 수행한다는 것입니다(와일드카드를 사용하지 않는 경우). 예를 들어, SOSL에서 'Digital'을 검색하면 필드 값이 'Digital' 또는 'The Digital Company'인 레코드가 반환되지만 SOQL은 필드 값이 'Digital'인 레코드만 반환합니다.

SOQL과 SOSL은 구문이 다른 두 개의 별도 언어입니다. 각 언어에는 고유한 사용 사례가 있습니다.

  • SOQL을 사용하여 단일 개체에 대한 레코드를 검색합니다.
  • SOSL을 사용하여 여러 개체에서 필드를 검색합니다. SOSL 쿼리는 개체에서 대부분의 텍스트 필드를 검색할 수 있습니다.

전제 조건

이 유닛의 일부 쿼리는 조직에 계정과 연락처가 있을 것으로 예상합니다. SOQL 유닛에서 샘플 데이터를 생성하지 않았다면 이 유닛에서 샘플 데이터를 생성합니다. 그렇지 않으면 이 섹션에서 샘플 데이터 생성을 건너뛸 수 있습니다.

  1. Developer Console의 Debug(디버그) 메뉴에서 Execute Anonymous(익명 실행) 창을 엽니다.
  2. 창에 아래 코드조각을 삽입하고 Execute(실행)를 클릭합니다.
// Add account and related contact
Account acct = new Account(
    Name='SFDC Computing',
    Phone='(415)555-1212',
    NumberOfEmployees=50,
    BillingCity='San Francisco');
insert acct;
// Once the account is inserted, the sObject will be 
// populated with an ID.
// Get this ID.
ID acctID = acct.ID;
// Add a contact to this account.
Contact con = new Contact(
    FirstName='Carol',
    LastName='Ruiz',
    Phone='(415)555-1212',
    Department='Wingo',
    AccountId=acctID);
insert con;
// Add account with no contact
Account acct2 = new Account(
    Name='The SFDC Query Man',
    Phone='(310)555-1213',
    NumberOfEmployees=50,
    BillingCity='Los Angeles',
    Description='Expert in wing technologies.');
insert acct2;

쿼리 편집기 사용

Developer Console은 SOSL 쿼리를 실행하고 결과를 볼 수 있는 쿼리 편집기 콘솔을 제공합니다. 쿼리 편집기는 데이터베이스를 검사하는 빠른 방법을 제공합니다. Apex 코드에 추가하기 전에 SOSL 쿼리를 테스트하는 좋은 방법입니다. 쿼리 편집기를 사용하는 경우 주변에 Apex 코드 없이 SOSL 문만 제공하면 됩니다.

다음 SOSL 예제를 실행해 보겠습니다.

  1. Developer Console에서 Query Editor(쿼리 편집기) 탭을 클릭합니다.
  2. 쿼리 편집기 아래의 첫 번째 상자에 다음을 복사하여 붙여넣은 다음 Execute(실행)를 클릭합니다.
FIND {Wingo} IN ALL FIELDS RETURNING Account(Name), Contact(FirstName,LastName,Department)

기준을 충족하는 조직의 모든 계정 및 연락처 레코드는 쿼리 결과 섹션에 필드가 있는 행으로 표시됩니다. 결과는 각 개체(계정 또는 연락처)에 대한 탭으로 그룹화됩니다. SOSL 쿼리는 값이 Wingo와 일치하는 필드가 있는 레코드를 반환합니다. 샘플 데이터에 따르면 하나의 연락처에만 Wingo 값이 있는 필드가 있으므로 이 연락처가 반환됩니다.

참고

참고

쿼리 편집기 및 API의 검색 쿼리는 중괄호({Wingo})로 묶습니다. 대조적으로 Apex에서 검색 쿼리는 작은따옴표('Wingo')로 묶습니다.

기본 SOSL 구문

SOSL을 사용하면 다음 검색 기준을 지정할 수 있습니다.
  • 검색할 텍스트 표현식(단어 또는 구)
  • 검색할 필드 범위
  • 검색할 개체 및 필드 목록
  • 소스 개체의 행 선택 조건

다음은 Apex의 기본 SOSL 쿼리의 구문입니다. 

FIND 'SearchQuery' [IN SearchGroup] [RETURNING ObjectsAndFields]

Query Editor and API(쿼리 편집기 및 API)에서 구문은 다음과 같이 약간 다릅니다.

FIND {SearchQuery} [IN SearchGroup] [RETURNING ObjectsAndFields]

SearchQuery는 검색할 텍스트입니다(단일 단어 또는 구). 검색어는 논리 연산자(AND, OR)와 괄호로 그룹화할 수 있습니다. 또한 검색어에 와일드카드 문자(*, ?)가 포함될 수 있습니다. * 와일드카드는 검색어의 중간이나 끝에 있는 0개 이상의 문자와 일치합니다. ? 와일드카드는 검색어의 중간이나 끝에 있는 하나의 문자와만 일치합니다.

텍스트 검색은 대소문자를 구분하지 않습니다. 예를 들어 Customer, customer 또는 CUSTOMER 모두 동일한 결과를 반환합니다.

SearchGroup은 선택 사항이며 검색할 필드의 범위를 나타냅니다. 지정하지 않으면 기본 검색 범위는 모든 필드입니다. SearchGroup은 다음 값 중 하나를 사용할 수 있습니다.

  • ALL FIELDS
  • NAME FIELDS
  • EMAIL FIELDS
  • PHONE FIELDS
  • SIDEBAR FIELDS

ObjectsAndFields는 선택 사항입니다. 검색 결과에 반환할 정보는 하나 이상의 sObject 목록과 각 sObject 내에서 필터링할 선택적 값이 있는 하나 이상의 필드 목록입니다. 지정하지 않을 경우 검색 결과에 발견된 모든 개체의 ID가 포함됩니다.

단일 단어 및 구

SearchQuery에는 두 가지 유형의 텍스트가 포함되어 있습니다.

  • Single Word - 단일 단어(예: test 또는 hello)를 나타냅니다. SearchQuery의 단어는 공백, 구두점 및 문자에서 숫자(또는 그 반대로)로 변경으로 구분됩니다. 단어는 항상 대소문자를 구분하지 않습니다.
  • Phrase - “josh smith”와 같이 큰따옴표로 묶인 단어 및 공백 모음을 나타냅니다. 여러 단어를 논리 및 그룹화 연산자와 함께 결합하여 보다 복잡한 쿼리를 형성할 수 있습니다.

검색 예

SOSL 검색이 작동하는 방식에 대해 알아보기 위해 다양한 검색 문자열을 사용하여 샘플 데이터를 기반으로 출력이 무엇인지 살펴보겠습니다. 이 테이블에는 다양한 예제 검색 문자열과 SOSL 검색 결과가 나와 있습니다.

다음을 모든 필드에서 검색 검색 설명 일치하는 레코드 및 필드
The Query 이 검색은 텍스트의 모든 위치에서 필드에 The 및 Query라는 두 단어가 모두 포함된 모든 레코드를 반환합니다. 검색어의 단어 순서는 중요하지 않습니다. 계정: The SFDC Query Man(이름 필드 일치)
Wingo OR Man 이 검색은 OR 논리 연산자를 사용합니다. Wingo라는 단어가 포함된 필드가 있는 레코드 또는 Man이라는 단어가 포함된 필드가 있는 레코드를 반환합니다. 연락처: Carol Ruiz, 부서: 'Wingo'

계정: The SFDC Query Man(이름 필드 일치)

1212 이 검색은 필드에 1212라는 단어가 포함된 모든 레코드를 반환합니다. -1212로 끝나는 전화 필드는 1212가 대시로 구분될 때 단어로 간주되기 때문에 일치합니다. 계정: The SFDC Query Man, 전화: '(415)555-1212'

연락처: Carol Ruiz, 전화: '(415)555-1212'

wing* 와일드카드 검색입니다. 이 검색은 wing으로 시작하는 필드 값이 있는 모든 레코드를 반환합니다. 연락처: Maria Ruiz, 부서: 'Wingo'

계정: The SFDC Query Man, 설명: 'Expert in wing technologies'

SOSL Apex 예

이 예는 Apex에서 SOSL 쿼리를 실행하는 방법을 보여줍니다. 먼저 soslFindClause 변수에 검색 쿼리가 할당됩니다. 이 검색 쿼리는 OR 논리 연산자로 결합된 두 개의 용어(Wingo 및 SFDC)로 구성되어 있습니다. SOSL 쿼리는 바인딩이라고도 부르는 콜론을 앞에 붙여 이 로컬 변수를 참조합니다. 결과 SOSL 쿼리는 모든 필드에서 Wingo 또는 SFDC를 검색합니다. 이 예에서는 각 샘플 계정에 단어 중 하나가 포함된 필드가 있으므로 모든 샘플 계정을 반환합니다. SOSL 검색 결과는 목록으로 반환됩니다. 각 목록에는 반환된 레코드의 배열이 포함됩니다. 이 경우 목록에는 두 개의 요소가 있습니다. 인덱스 0에서 목록은 계정 배열을 포함합니다. 인덱스 1에서 목록은 연락처 배열을 포함합니다.

Developer Console의 Execute Anonymous(익명 실행) 창에서 이 코드 조각을 실행합니다. 그런 다음 디버그 로그를 검사하여 모든 레코드가 반환되었는지 확인합니다.

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);
}

추가 정보 알아보기

SOSL 쿼리의 반환 결과를 필터링, 재정렬 및 제한할 수 있습니다. SOSL 쿼리는 여러 sObject를 반환할 수 있으므로 해당 필터는 RETURNING 절 내의 각 sObject 내에 적용됩니다.

개체에 대한 WHERE 절에 조건을 추가하여 SOSL 결과를 필터링할 수 있습니다. 예를 들어 의류 산업인 계정의 결과인 RETURNING Account(Name, Industry WHERE Industry='Apparel')만 반환됩니다.

마찬가지로 하나의 sObject에 대한 순서 지정 결과는 개체에 대한 ORDER BY를 추가하여 지원됩니다. 예를 들어 이렇게 하면 반환된 계정이 이름 필드(RETURNING Account(Name, Industry ORDER BY Name))에서 순서가 지정됩니다.

반환된 레코드의 수는 레코드의 하위 집합으로 제한될 수 있습니다. 이 예에서는 반환된 계정을 10개(RETURNING Account(Name, Industry LIMIT 10))로만 제한합니다.

Salesforce 도움말에서 Trailhead 피드백을 공유하세요.

Trailhead에 관한 여러분의 의견에 귀 기울이겠습니다. 이제 Salesforce 도움말 사이트에서 언제든지 새로운 피드백 양식을 작성할 수 있습니다.

자세히 알아보기 의견 공유하기