SOSL について
Salesforce Object Search Language (SOSL) を使用して、組織の Salesforce データから特定の情報を検索できます。SOSL では、カスタムオブジェクトも含め、アクセス権のあるすべてのオブジェクトを 1 つのクエリで検索できます。
SOSL では、ソースオブジェクトに次を指定できます。
- テキスト式
- 検索する項目範囲
- 取得するオブジェクトと項目のリスト
- ソースオブジェクトの行の選択条件
SOSL と SOQL の比較
Salesforce Object Query Language (SOQL) と同様、SOSL では組織の Salesforce データから特定の情報を検索できます。一度に 1 つのオブジェクトのみをクエリできる SOQL とは異なり、SOSL では、1 つのクエリでアクセス可能なすべてのオブジェクト (カスタムオブジェクトを含む) を検索できます。API は指定された範囲内で検索を実行し、アプリケーションのログインに使用されたユーザ権限に基づいて使用可能な情報のみを返します。
- 1 つのオブジェクトのレコードを選択するには、SOQL の query() コールを使用します。
- 1 つ以上のオブジェクトのレコードを検索するには、SOSL の search() コールを使用します。search() コールはオブジェクトのほとんどのテキスト項目を検索します。検索される項目については、「検索範囲」を参照してください。
効率的なテキスト検索の設計
検索内容が一般的すぎる場合、検索に時間がかかり多数の結果が返されます。より効率的に検索するためには、次を使用します。
- IN 句 (検索する列の種類を制限)
- RETURNING 句 (検索するオブジェクトを制限)
- LIMIT 句 (検索結果を制限)
- OFFSET 句 (検索結果をページング処理)
検索範囲
search() コールは、アクセス権のあるほとんどのオブジェクト (カスタムオブジェクトを含む) とテキスト項目を検索します。次のオブジェクトと項目は検索しません。
- 検索不可と定義されている (searchable が false の) 選択リストなどの要素。特定のオブジェクトが検索可能かどうかを確認するには、アプリケーションでオブジェクトに対する describeSObjects() コールを実行し、DescribeSObjectResult の searchable プロパティを確認します。
- 数値、日付、またはチェックボックス項目。これらの情報を検索するには、代わりに query() コールを使用します。
- textarea 項目 (ALL FIELDS 検索グループを使用しない場合)。
- Account、Contact、または Opportunity などの特定のオブジェクトに関連付けられた Attachment レコード。
次の実装のヒントに注意してください。
- ユーザの検索結果ページの固定表示オブジェクトを含め、ログインユーザのデフォルトの検索範囲内にあるオブジェクトの順序付きリストを取得するには、describeSearchScopeOrder() を使用します。
- search() コールは、記事のシノニム照合、ストップワード、語幹処理、およびスペル修正を提供します。多くの場合、search() コールはシノニム照合やストップワードなどの特殊な検索機能は提供しません。
- Apex では、SOQL ステートメントや SOSL ステートメントをオンザフライで使用するには、大括弧で囲む必要があります。さらに、前にコロン (:) がある場合は、Apex スクリプト変数と式を使用できます。