You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Supabase API在Supabase数据库中实现部分文本搜索?

在Supabase中实现部分文本搜索的两种方案

方案1:简单前缀/包含搜索(适合小数据集)

直接借助PostgreSQL的LIKE/ILIKE(不区分大小写)操作符,通过Supabase JS API快速实现:

假设你要搜索users表中name列以输入文本开头的记录:

const searchTerm = "He";
const { data, error } = await supabase
  .from('users')
  .select('*')
  .ilike('name', `${searchTerm}%`); // % 为通配符,放在末尾表示前缀匹配

如果需要包含匹配(比如输入"ell"匹配"Hello"),将通配符放在搜索词两侧:

.ilike('name', `%${searchTerm}%`);

⚠️ 注意:该方法在数据量较大(如万级以上)时性能会明显下降,因为无法利用索引优化。

方案2:基于全文搜索的前缀匹配(适合大数据集)

通过创建全文索引提升搜索性能,结合PostgreSQL的分词能力实现高效前缀匹配:

步骤1:创建全文索引

打开Supabase控制台的SQL编辑器,执行以下语句为目标列创建GIN索引(以users.name列为例):

-- 基于name列创建英文分词的全文索引
CREATE INDEX users_name_fulltext_idx ON users USING GIN (to_tsvector('english', name));

步骤2:通过Supabase API执行搜索

使用textSearch过滤器,搭配:*前缀通配符实现前缀匹配:

const searchTerm = "He";
const { data, error } = await supabase
  .from('users')
  .select('*')
  .textSearch('name', `${searchTerm}:*`, {
    config: 'english' // 需与索引使用的分词配置一致
  });

该方法会利用全文索引加速查询,在大数据集上性能远优于LIKE,同时支持智能分词匹配(比如输入"hel"也能匹配"Hello")。

补充说明

  • 全文搜索默认会统一转换为小写处理,建议将输入的搜索词先转为小写:searchTerm.toLowerCase()
  • 若需支持中文,将english替换为chinese分词配置即可

内容的提问来源于stack exchange,提问作者Jasperan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.11 21:42:11