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

如何在Supabase pgvector中按自定义字段过滤向量查询结果?

解决pgvector按自定义company_id过滤向量匹配的问题

你需要通过company_id字段隔离不同企业的文档数据,实现类似Pinecone的space-name功能,在向量匹配时仅返回指定企业的相关文档。当前的match_documents函数存在几个关键问题,以下是修改方案:

当前函数的问题

  • 未定义company_id参数,无法接收前端传入的企业ID
  • WHERE子句中documents.custom_id = custom_id错误:表字段实际是company_id,且未引用外部参数,会导致无意义的自比较(条件永远为真)
  • 函数中query_embedding的维度是vector(384),与表中embedding vector(1536)维度不匹配,会引发计算错误

修改后的完整函数

create or replace function match_documents (
  query_embedding vector(1536), -- 与表中embedding维度保持一致
  match_threshold float,
  match_count int,
  company_id text -- 添加company_id参数
)
returns table (
  id bigint,
  content text,
  similarity float,
  company_id text -- 可选:返回company_id方便验证
)
language sql stable
as $$
  select
    documents.id,
    documents.content,
    1 - (documents.embedding <=> query_embedding) as similarity,
    documents.company_id
  from documents
  where 
    1 - (documents.embedding <=> query_embedding) > match_threshold
    and documents.company_id = match_documents.company_id -- 使用函数参数匹配表字段
  order by similarity desc
  limit match_count;
$$;

关键修改说明

  • 添加company_id text作为函数参数,接收前端传入的企业ID
  • 统一query_embedding的维度为vector(1536),与表中定义一致
  • WHERE子句中明确使用match_documents.company_id(函数参数)匹配表中的documents.company_id,实现数据隔离
  • 可选:在返回结果中加入company_id,方便验证返回数据的归属

前端调用注意事项

确保传入有效的company_id值,示例:

const { data: documents, error } = await supabaseClient.rpc('match_documents', {
  query_embedding: embedding,
  match_threshold: .73,
  match_count: 10,
  company_id: "your_company_unique_id" // 传入目标企业的ID
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 07:40:17