ApexでSOSLを使いこなす:取得・加工・操作の実践ガイド
Salesforce開発において、SOSLは「キーワード検索」を実現するための非常に強力なツールです。特にApexと組み合わせることで、ナレッジ検索やグローバル検索、類似データ抽出などを柔軟に実装できます。
本記事では、ApexでのSOSLの基本から、取得・加工・実務での使い方までを体系的に解説します。
1. SOSLの基本構造(おさらい)
ApexでのSOSLは以下のように記述します。
List<List<SObject>> results = [
FIND 'エラー'
IN ALL FIELDS
RETURNING Case(Id, Subject), Knowledge__kav(Id, Title)
];
ポイント:
・戻り値は「List<List
・RETURNINGの順番で結果が入る
・複数オブジェクト同時検索が可能
2. 基本的な取得方法
■ 単純な検索
String keyword = 'ログイン';
List<List<SObject>> searchResults = [
FIND :keyword
IN ALL FIELDS
RETURNING Case(Id, Subject)
];
List<Case> cases = (List<Case>) searchResults[0];
ここで重要なのはキャスト処理です。
3. 複数オブジェクトの取得
List<List<SObject>> results = [
FIND 'エラー'
IN ALL FIELDS
RETURNING
Case(Id, Subject),
Knowledge__kav(Id, Title)
];
List<Case> caseList = (List<Case>) results[0];
List<Knowledge__kav> knowledgeList = (List<Knowledge__kav>) results[1];
ポイント:
・RETURNINGの順番がそのままインデックスになる
・型キャストを忘れるとエラーになる
4. 動的SOSL(ユーザー入力検索)
実務ではユーザー入力を使うケースが多いです。
public static List<Case> searchCases(String keyword) {
if(String.isBlank(keyword)) {
return new List<Case>();
}
List<List<SObject>> results = [
FIND :keyword
IN ALL FIELDS
RETURNING Case(Id, Subject, Status)
];
return (List<Case>) results[0];
}
ポイント:
・必ずNULLチェック
・ユーザー入力をそのまま使う
5. 検索結果の加工
SOSL結果はそのまま使うだけでなく加工も重要です。
■ 件数制御
List<Case> cases = (List<Case>)results[0];
if(cases.size() > 10) {
cases = cases.subList(0, 10);
}
■ マップ化
Map<Id, Case> caseMap = new Map<Id, Case>(cases);
高速アクセスが可能になります。
6. SOSL + ナレッジ検索実装例
実務でよくあるパターンです。
public static List<Knowledge__kav> searchKnowledge(String keyword) {
List<List<SObject>> results = [
FIND :keyword
IN ALL FIELDS
RETURNING Knowledge__kav(Id, Title, Summary)
];
return (List<Knowledge__kav>) results[0];
}
用途:
・サポート画面のサジェスト
・FAQ検索
7. SOSLの制限と注意点
■ 戻り値はList<List>固定
→ 1次元配列ではない
■ LIKE検索との違い
→ LIKEより圧倒的に高速
■ インデックス依存
→ 検索対象フィールドに制限あり
8. よくあるミス
■ キャストミス
List<Case> cases = results[0]; // NG
→ 必ずキャストが必要
■ インデックス順番ミス
RETURNING順と取得順がズレるとバグになる
■ キーワード未加工
ユーザー入力をそのまま使うと検索精度が低下
9. 実務での使いどころ
・ナレッジ検索
・ケース類似検索
・グローバル検索機能
・サジェスト機能
特にUI検索系はほぼSOSLが適しています。
10. SOQLとの組み合わせ設計
実務では以下の構成が多いです:
- SOSLで候補取得
- SOQLで詳細取得
例:
・SOSL → 検索結果ID取得
・SOQL → 詳細データ取得
これによりパフォーマンスと精度を両立できます。
まとめ
ApexにおけるSOSLは「検索体験を作るための武器」です。
単純なデータ取得ではなく、ユーザーが自然に検索できる仕組みを作ることが重要です。
正しく使えば、ナレッジ検索・ケースサポート・UI検索を大幅に改善できます。
