概要
Salesforce Object Search Language (SOSL) で電話番号フィールドを条件に検索することができます。
電話番号は 0312345678
や 03-1234-5678
などのように、表記揺れが出やすい項目ですが、なんとなくあいまいでもマッチする感触がありました。
いくつか登録して簡易的に検証してみた結果を記録します。
確認環境
- Developer Edition Winter ’23
- API Version 55
確認手順
テストデータを登録
取引先責任者(Contact)レコードを登録します。
- 数字のみ
- ハイフン区切り
- 全角数字のみ
- 全角ハイフン区切り
- 市外局番をカッコ括り+ハイフン区切り
- E.164フォーマット
テスト用コード作成
検索文字列を数字のみとして、取引先責任者オブジェクトの電話番号フィールドを対象にSOSLクエリし、マッチ結果を出力する内容です。
String phoneNumber = '0312345678';
List<List<SObject>> searchList = [
FIND :phoneNumber IN PHONE FIELDS
RETURNING Contact (Id, Name, Phone ORDER BY Name)];
List<Contact> contacts = searchList[0];
For (Contact contact: contacts) {
System.debug(contact.Name + '/' + contact.Phone);
}
実行
開発者コンソールで実行し、出力ログを確認します。
なんと全部マッチしました。
他のパターン
検索文字列を ハイフン区切りの 03-1234-5678
としても上記と同じ結果でした。
検索文字列を E.164フォーマットの +81312345678
とすると、E.164フォーマットの1レコードのみマッチしました。
最後に
ハイフン区切りぐらいはマッチすると思っていましたが、E.164フォーマットの登録でもマッチするのは少し驚きました。
どのようなマッチングロジックなのでしょう。