Supabaseを使った検索機能の実装(部分一致、完全一致、大文字小文字対応)
# Supabaseを使った検索機能の実装
データベースでの検索は多くのアプリケーションで重要な機能ですが、効果的な検索機能の実装は少し難しく感じるかもしれません。このガイドでは、簡単なものから少し複雑なものまで、4つの検索方法を紹介します。
準備
まずは、Supabaseのセットアップから始めましょう。以下のコードを使ってSupabaseクライアントを初期化します:
import { createClient, SupabaseClient } from '@supabase/supabase-js';
const supabase: SupabaseClient = createClient('YOUR_SUPABASE_URL', 'YOUR_SUPABASE_ANON_KEY');
注意:実際のプロジェクトでは、YOUR_SUPABASE_URL
とYOUR_SUPABASE_ANON_KEY
を環境変数として管理することをお勧めします。
検索方法1: 基本的な部分一致検索
最も簡単な検索方法から始めましょう。この方法では、指定したキーワードが商品名の一部に含まれているものを検索します。
async function basicPartialMatch(keyword: string) {
const { data, error } = await supabase
.from('items')
.select()
.ilike('name', `%${keyword}%`);
if (error) {
console.error('Error in basicPartialMatch:', error);
return null;
}
return data;
}
この方法のポイント:
-
ilike
を使用することで、大文字小文字を区別しない検索ができます。 -
%
はワイルドカードで、任意の文字列にマッチします。
使用例:'ppl'で検索すると、'Apple'も'apple'も結果に含まれます。
検索方法2: 複数カラムの部分一致検索
次は、商品名と説明の両方から検索する方法です。これにより、より広範囲な検索が可能になります。
async function multiColumnPartialMatch(keyword: string) {
const { data, error } = await supabase
.from('items')
.select()
.or(`name.ilike.%${keyword}%, description.ilike.%${keyword}%`);
if (error) {
console.error('Error in multiColumnPartialMatch:', error);
return null;
}
return data;
}
この方法のポイント:
-
or
を使用して、複数のカラムに対する条件を指定しています。 - 商品名か説明のどちらかにキーワードが含まれていれば結果に含まれます。
検索方法3: 正規表現を使用した検索
より複雑な検索パターンが必要な場合は、正規表現を使用します。
async function regexPartialMatch(keyword: string) {
const { data, error } = await supabase
.from('items')
.select()
.iregex('name', keyword);
if (error) {
console.error('Error in regexPartialMatch:', error);
return null;
}
return data;
}
この方法のポイント:
-
iregex
を使用することで、正規表現パターンによる検索が可能になります。 - 大文字小文字を区別しない正規表現検索ができます。
使用例:'p+l'で検索すると、'apple'や'pineapple'がマッチします。
検索方法4: 全文検索
最後に、より高度な検索方法として全文検索を紹介します。この方法は大量のテキストデータを効率的に検索する際に便利です。
async function fullTextSearch(keyword: string) {
const { data, error } = await supabase
.from('items')
.select()
.textSearch('name', keyword, {
config: 'english' // 言語設定
});
if (error) {
console.error('Error in fullTextSearch:', error);
return null;
}
return data;
}
この方法のポイント:
-
textSearch
を使用することで、より自然言語に近い検索が可能になります。 - 単語の語形変化なども考慮されるため、柔軟な検索ができます。
注意:この方法を使用するには、Supabaseでテーブルに全文検索インデックスを設定する必要があります。
まとめ
以上、Supabaseを使った4つの検索方法を紹介しました。それぞれの方法には長所と短所があります:
- 基本的な部分一致検索:シンプルで使いやすいですが、大規模なデータセットでは遅くなる可能性があります。
- 複数カラムの部分一致検索:より広範囲な検索が可能ですが、検索対象が増えるためパフォーマンスに影響が出る可能性があります。
- 正規表現を使用した検索:複雑な検索パターンに対応できますが、正規表現の知識が必要です。
- 全文検索:大量のテキストデータに対して効率的ですが、セットアップが少し複雑です。
アプリケーションの要件や扱うデータの特性に応じて、適切な検索方法を選択してください。また、実際のプロジェクトでは、これらの検索メソッドをサービスレイヤーやデータアクセスレイヤーにカプセル化することをお勧めします。