如何在一个使用pgvector存储嵌入的supplier数据库中添加一个自定义过滤器到一个sql函数。
create table documents (
id bigserial primary key,
content text,
embedding vector(1536),
custom_id text // Custom id for each company
);
大概是这样的:
create or replace function match_documents (
query_embedding vector(1536),
match_threshold float,
match_count int,
custom_id text
)
returns table (
id bigint,
content text,
similarity float
)
language sql stable
as $$
select
documents.id,
documents.content,
1 - (documents.embedding <=> query_embedding) as similarity
from documents
where documents.custom_id == custom_id
order by similarity desc
limit match_count;
$$;
这个函数的问题是,如果我询问关于x custom_id的信息,它会从所有文档中返回数据,它不尊重where。在检查嵌入相似性之前,我需要通过custom_id过滤文档。
谢谢你!
1条答案
按热度按时间0pizxfdo1#
我看到两个问题。首先,Postgres使用
=
,而不是==
进行相等性检查。其次,由于有一个名为custom_id
的列和一个名为custom_id
的函数参数,因此需要消除这两者的歧义。您可以通过在过滤器中的custom_id
之前添加函数名和一个点(在本例中为match_documents.
)来实现。