1.Salesforce에서 검색을 처리하는 방식은

사용자가 검색 필드에 용어를 입력할 경우

검색 엔진에서 해당 검색어를 토큰으로 분리하고

토큰을 검색 색인에 저장된 레코드와 일치시킨 다음

관련성에 따른 레코드 순위를 지정해 사용자가 액세스할 수 있는 결과를 반환한다.

데이터베이스를 통해 검색할 수도 있지만

토큰을 사용할 경우 맞춤법 수정, 별명, 표제어 표기법 및 동의어 그룹 등 고급 기능 적용이 가능하다.

 

 

2.SFDC에서 기본 제공하는 검색 자체가 위에서 언급한 방식으로 작동하기 때문에

대부분의 상황에서 적절하게 작동하지만 사용자 정의 UI를 사용하는 등의 특수 상황에서는

맞춤형 솔루션이 필요하다.

데이터가 있는 개체 또는 필드를 알고 있는 상황에서 아래의 작업을 하려는 경우 SOQL을 사용하고

  • 단일 개체 또는 서로 관련된 다중 개체에서 데이터를 검색
  • 지정된 기준을 충족하는 레코드 수를 계산
  • 쿼리의 일부로 결과를 정렬
  • 숫자, 날짜 또는 확인란 필드에서 데이터를 검색

데이터가 상주하는 개체 또는 필드를 모르는 상태로 아래의 작업을 수행하는 경우 SOSL을 사용한다.

  • 필드 내에 존재하는 특정 용어에 대한 데이터를 검색할 때 SOSL은 필드 내에서 여러 용어를 토큰화하고 이로부터 검색 색인을 구축할 수 있으므로 SOSL 검색이 더 빠르고 더 관련성 있는 결과를 반환할 수 있다.
  • 여러 개체와 필드를 효율적으로 검색하고 개체는 서로 관련이 있을 수도 있고 그렇지 않을 수도 있을 때
  • 부서 기능을 사용하여 조직의 특정 부서에 대한 데이터를 검색하고 가능한 한 가장 효율적인 방법으로 찾을 수 있습니다.

또한 Salesforce에는 Salesforce Federated Search라는 솔루션이 존재하는데

내부 프로그램 및 페이지에서 외부 검색을 작동시키는 방식이다.

 

 

3.SOQL, SOSL이 위에서 언급됐는데

SOQL은 특정 데이터를 정확하게 일치하는 경우 반환하는 느낌이고

SOSL은 유사한 내용까지 검색해주는 조금 더 검색엔진과 친숙한 느낌이었다.

이런 SOQL을 이용하기 위해서는 Query를 전송하게 되고 (”query()”)

SOSL을 사용하기 위해서는 Serch를 사용한다(”serch()”).

 

 

4.SOSL을 사용해 검색을 진행할 경우

단일 객체 내에서 검색은 “FIND {term} RETURNING ObjectTypeName” 형태로 검색하고

다중 개체 내에서 검색은 아래 형태로 검색한다.

“FIND {term} RETURNING ObjectTypeName1, ObjectTypeName2, ObjectTypeNameYouGetTheIdea”

또한 단일 객체가 custom object일 경우 __C 접미사를 추가해서 구분한다.

“FIND {pink hi\-top} RETURNING Merchandise__c”

 

 

5.검색 쿼리(SOSL)는 SQL보다 압도적으로 시간이 소모될 수 있기 때문에

검색 범위와 결과가 많을수록 전체 작업 속도가 느려질 수 있는데

이런 문제를 막기 위해 검색 범위 제한과 반환 범위 제한을 지정해 개선할 수 있다.

사용자가 이메일을 검색하고 싶은 경우

모든 데이터에서 일치 요소가 있는지 확인할 필요 없이

이메일 필드에서만 검색을 진행해도 같은 결과를 만들 수 있다.

“FIND {jsmith@cloudkicks.com} IN EMAIL FIELDS RETURNING Contact”

사용자가 고양이를 검색했을 때

고양이에 대한 여러가지 정보를 기대하고 검색했을 것이고

특히 사진, 특징, 키우는 법, 동영상에 대한 정보를 기대했을 가능성이 높다.

하지만 객체, 필드를 지정하지 않을 경우 “고양”시 “이”케아 분기 결산 보고서가 나타날 수도 있으며

이런 내용과 관련없는 데이터들로 화면이 가득 차 원하는 정보를 보기 어려울 수 있다.

이런 문제를 막고 더 빠르게 검색 결과를 얻을 수 있도록

아래의 제한 요소들을 사용해 단계적으로 결과 제한 조건을 늘려나갈 수 있다.

  • ObjectTypeName - 반환할 객체를 지정합니다.
  • FieldList - 반환할 필드를 지정합니다
  • ORDER By - 결과를 정렬할 필드를 지정합니다. 오름차순 또는 내림차순을 지정할 수도 있습니다.
  • LIMIT n - 주어진 개체에 대해 반환되는 최대 레코드 수를 설정합니다.
  • OFFSET n - 쿼리에서 반환된 결과 집합으로 시작 행 오프셋을 설정합니다.

단계 목표 예

1 반환할 개체를 지정합니다. FIND {Cloud Kicks} RETURNING Account
2 반환할 필드를 지정합니다. FIND {Cloud Kicks} RETURNING Account(Name, Industry)
3 기본값인 오름차순으로 필드별로 결과를 정렬합니다. FIND {Cloud Kicks} RETURNING Account (Name, Industry ORDER BY Name)
4 반환되는 최대 레코드 수 설정 FIND {Cloud Kicks} RETURNING Account (Name, Industry ORDER BY Name LIMIT 10)
5 결과에 시작 행 오프셋을 설정합니다. FIND {Cloud Kicks} RETURNING Account (Name, Industry ORDER BY Name LIMIT 10 OFFSET 25)

해당 방식으로 검색 결과 범위를 제한한 다음

아래의 방식으로 검색 범위 제한을 지정해 특정 범위 내에서만 검색하게 할 수 있다.

자원
나누기 FIND {Cloud Kicks} RETURNING Account (Name, Industry) WITH DIVISION = 'Global’
데이터 범주 포함 FIND {race} RETURNING KnowledgeArticleVersion (Id, Title WHERE PublishStatus='online' and language='en_US') WITH DATA CATEGORY Location__c AT America__c
네트워크와 함께 FIND {first place} RETURNING User (Id, Name), FeedItem (id, ParentId WHERE CreatedDate = THIS_YEAR Order by CreatedDate DESC) WITH NETWORK = '00000000000001’
가격표 포함 Find {shoe} RETURNING Product2 WITH PricebookId = '01sxx0000002MffAAE’

 

SOSL과 SOQL은 아래와 같은 검색어 차이가 존재한다.

I want to... SOSL SOQL
Limit the data that is searched IN SearchGroup WHERE
Specify the data to be returned in the response Returning FieldSpec SELECT
Sort results ORDER BYLIMITOFFSET ORDER BYLIMITOFFSET
Filter by data category WITH DATA CATEGORY WITH DATA CATEGORY

 

 

6.Command Line Interface는 그래픽이 아닌 글로 상호작용하며 작업을 처리하는 방식이다.

Window에서는 PowerShell을 사용하고 macOS에서는 Zsh 또는 z라고 하고

Linux에서는 BASH셸을 사용하는데 z셸이 BASH셸의 업그레이드 버전같은 느낌이라고 한다.

ZSH 등은 출력을 문자열로 처리하지만

Window에서 제공하는 PowerShell은 객체로 처리하기 때문에

사용자가 정보를 처리하기 더 어려운 문제가 있다.

 

 

7.명령은 일반적으로 수행할 명령을 의미하는 Command 부분과

옵션 등을 나타내는 flag 부분(-n, -s 등)과 해당 flag에 기입될 argument 부분이 있다.

 

 

 

 

 

(1).백준 11966번 2의 제곱인가는 2의 제곱수인지 아닌지를 판별하는 문제로

2보다 큰 숫자가 2로 나눴을 때 정수가 아닐 경우 2의 배수가 아니라고 설정했으며

1까지 나눠질 경우 2의 배수라고 판별하고 기존에 설정한 1(true일 경우 1 출력 요구)이 출력되게 했다.

let input = 4

let result = 1
while(input > 1){
    input /= 2
    if(input !== Math.floor(input)){
        result = 0
        break
    }
}

console.log(result)

'회고' 카테고리의 다른 글

[수습일지] - 14(주말)  (0) 2023.04.09
[수습일지] - 13(주말)  (0) 2023.04.08
[수습일지] - 11  (0) 2023.04.06
[수습일지] - 10  (0) 2023.04.05
[수습일지] - 9  (0) 2023.04.04

+ Recent posts