はじめに
Salesforceに携わっている人の中には、SOQL(Salesforce Object Query Language)を業務で使えても、SOSL(Salesforce Object Search Language)を業務で使えない人は多いのではないでしょうか。
本記事を読むことにより、複数オブジェクト間でのキーワード検索やSOSLの記入例、SOQLとの違いなどを学ぶことができます。
これからApexを用いての開発やSOSLを学びたい人の一助になれば幸いです。
SOQLとSOSLについての概要
SOQLとSOSLの違いについての解説いたします。
項目 | SOQL(Salesforce Object Query Language) | SOSL(Salesforce Object Search Language) |
---|---|---|
主な用途 | 特定オブジェクトからのレコード取得 | 複数オブジェクトに対するキーワード検索 |
検索対象 | 1つのオブジェクト | 複数オブジェクト |
検索方法 | オブジェクトのフィールドに基づいた条件検索 | キーワードによる全文検索 |
検索条件 | WHERE句で条件に一致するレコード | FIND句でキーワードに一致するレコード |
ここで注意したいのは、SOQLは1つのオブジェクトからデータを取得できるのに対し、SOSLは複数オブジェクトのフィールドに対して検索が可能ということです。
つまり、SOSLは複数オブジェクトの検索が可能なため、インシデントが発生した際の原因調査やオブジェクトが特定できない場合など幅広い検索をするときに、非常に有効であるといえます。
開発者コンソールの使用方法
SOSLの学習には、無料のDeveloper Edition環境もしくはTrailhead内で作成するPlayground環境で、開発者コンソールを使用するとよいでしょう。
まだアカウントを作成したことがない人は、下記リンクよりアカウントの作成をしてください。
Developer Edition環境:
ログインができましたら、画面右上の歯車アイコンより「開発者コンソール」をクリックします。
開発者コンソール画面が開きますので、画面下方の「Query Editor」タブをクリックし、下にある入力欄に
FIND {テスト}
と入力します。
左下の「Execute」ボタンをクリックすると、実行結果がワークスペースに表示されます
※Developer Edition環境にログインした直後はデータがありません。以下の結果では、取引先、取引先責任者のデータを手動で追加しています。
SOSLの基本構文
SOSLの基本構文:
FIND {テスト} IN ALL FIELDS RETURNING Account(Name)
FIND {検索キーワード}: 検索したいキーワードを指定します。
必須です。
検索キーワードをOR や AND でまとめて検索することも可能です。
FIND {株式会社 OR サンブリッジ}とした場合、「株式会社」あるいは 「サンブリッジ」と一致するデータが格納されているフィールドを検索します。
IN 検索対象のフィールド範囲: 検索対象のフィールド範囲を指定します。
省略可能です。
省略した場合は、「ALL FIELDS」が指定され、検索可能なすべての項目を検索します。
検索対象のフィールド範囲の種類は以下となります。
ALL FIELDS | 検索可能なすべての項目 |
NAME FIELDS | 標準オブジェクトのName項目 |
EMAIL FIELDS | メール項目 |
PHONE FIELDS | 電話番号項目 |
SIDEBAR FIELDS | サイドバーのドロップダウンリスト |
RETURNING オブジェクト名(フィールド名):
検索結果として表示したいオブジェクトとフィールドを、オブジェクト名(フィールド名)という形式で指定します。
省略可能です。
省略した場合は、Salesforce IDが返されます。
例1:最小の構文で、キーワード検索する
FIND {テスト}
例2:検索結果として、特定のオブジェクトのフィールドを返す
FIND {テスト} IN ALL FIELDS RETURNING Account(Name)
例3:検索結果として、特定のオブジェクトの複数フィールドを返す
FIND {テスト} IN ALL FIELDS RETURNING Account(ID, Name)
例4: 複数のキーワードで検索し、検索結果として、複数オブジェクトの複数フィールドを返す
FIND {テスト AND 太郎} IN ALL FIELDS RETURNING Account(ID, Name), Contact(ID, Name)
開発者コンソールを使った高度なSOSL活用法
例1:検索対象の絞り込み
オブジェクト名(フィールド名)をWHERE句を用いて絞り込むことが可能です。
FIND {テスト} IN ALL FIELDS RETURNING Account(Id, Name WHERE Name LIKE '%テスト%')
例2:ワイルドカードを用いた検索(*を使った部分一致検索)
FIND {テ*}とすることで『テ』から始まるフィールドが検索されます。
FIND {*テ}と検索した場合は、『テ』で終わるフィールドが検索されます。
FIND {テ*} IN ALL FIELDS RETURNING Account(Id, Name)
例3:LIMIT句とOFFSET句
SOSLで、検索して返される最大レコード数は2,000件となります。 デフォルトだと最大2,000件まで返されますが、返されるレコード数を制限することが可能です。
返されるデータを制限したい場合は、LIMIT句を用います。
※LIMIT句で指定して返されるレコードは、CreatedDate(作成日時)が直近のものから返します
FIND {テスト} IN ALL FIELDS RETURNING Account(Id, Name LIMIT 5)
OFFSET句は、スキップするレコード数を指定します。
LIMIT句とセットで用いられるのが一般的です。
下記の例だと、検索結果の6行目~10行目を返します。
※今回のテストデータは、テスト1が最も古く、テスト10が最も新しくなっています。 SOSLで返されるレコードはCreatedDate(作成日時)の降順のため、テスト10からテスト6がスキップされ、テスト5からテスト1の順で表示されています。
FIND {テスト} IN ALL FIELDS RETURNING Account(Id, Name LIMIT 5 OFFSET 5)
例4:検索結果のソート
ORDER BYを用いることで、検索結果をソートして出力することも可能です。
FIND {テスト} IN ALL FIELDS RETURNING Account(Id, Name ORDER BY Name)
SOSLの注意点とベストプラクティス
完全一致ではなく「部分一致」検索が基本
SOSLでは、ワイルドカード(*)を使用して、検索結果を絞り込みましょう。
例えば、FIND ‘サン’とした場合、「株式会社サンブリッジ」「サンブリッジ株式会社」「株式会社サンライズ」などが検索できてしまうので、FIND ‘サン*’と指定し、「サンブリッジ株式会社」に絞り込んだ方が良いということです。
対象オブジェクトの制限
SOSLでは最大20個のオブジェクトに対して検索が可能です。
組織の設定や権限により制限がかかる場合があります。
検索対象のフィールドを制限
検索できるのは、主にテキスト系のインデックス付きフィールド(例:Name、Emailなど)です。
数式フィールドなどは検索対象外になります。
※項目レベルセキュリティなどでユーザが参照できる項目を制限している場合も検索対象外になります。
ワイルドカード使用時のパフォーマンス
FIND ‘サン’のように部分一致のワイルドカード検索は、パフォーマンスを低下させます。
パフォーマンスが重要な場面では、できるだけ具体的なキーワードで検索することをおすすめします。
また、FIND ‘サン*'(前方一致検索), FIND ‘*サン’(後方一致検索)を使用できる場合は、ワイルドカードを使用することをおすすめします。
原則、できるだけ検索したいキーワードを絞り込むのが基本的な考えとなります。
トランザクション制限
SOSLの使用にもガバナ制限があり、1回のトランザクションで最大20回までの実行に制限されています。
まとめ
本記事では、Salesforceの開発者コンソールを活用したSOSLの基本的な使い方に加え、SOQLとの違いや利用時の注意点について解説しました。
SOSLは、SOQLと並んで非常に強力な検索ツールです。それぞれの得意分野を理解し、適切に使い分けることで、効率的にデータを取得することが可能になります。
なお、本記事では詳細を割愛しましたが、Apexコード内でSOQLとSOSLを組み合わせて活用することで、単体では実現が難しい柔軟な検索処理も実装できます。これにより、パフォーマンス向上や要件に応じた高度なデータ抽出が可能となります。
本記事が、Salesforceに携わる皆さまに、少しでもお役に立てば幸いです。
Salesforce導入・活用支援のご案内

サンブリッジが提供するSalesforce導入・活用支援サービスは、お客様の現状の業務用件や目指すゴールをヒアリングし、システム設計から実装までを行います。
導入後のトレーニングまでを含むきめ細やかなサービスを一貫して実施することにより、Salesforceの活用向上と導入の効果を最大化します。