我正在研究一个django API,我需要在其中实现搜索类型功能。起初我想使用Django SearchVector和SearchQuery,但是当查询条件不完整时,它们似乎表现不佳(这对于"即时输入"并不理想)。所以我选择了SQL方法。我需要能够搜索联系人的first_name和last_name以及与该联系人相关的用户的电子邮件。
我使用以下代码创建了一个关于联系人的search_vector,并在该列上添加了一个索引。这对于搜索姓和名非常有用。
ALTER TABLE contact_contact
ADD COLUMN search_vector tsvector;
UPDATE contact_contact
SET search_vector = to_tsvector('english', coalesce(first_name, '') || ' ' || coalesce(last_name, ''));
CREATE INDEX mc_idx2 ON contact_contact USING GIN (search_vector);
我想将用户电子邮件添加到这个search_vector
,类似于:
...
SET search_vector = to_tsvector('english', coalesce(first_name, '') || ' ' || coalesce(last_name, '') || coalesce(user.email::text, ' '));
...
我得到以下错误
ERROR: "."第二行:……|| ' ' || 合并(last_name")| |合并(user.email: te . .
"."
指的是"user.email"我不知道正确的语法或过程。任何帮助都非常感谢!
那么你必须在两个表之间连接:
UPDATE contact_contact cc
SET search_vector = to_tsvector('english', coalesce(first_name, '') || ' ' || coalesce(last_name, '') || ' ' || coalesce(u.email::text, '') || ' ' || coalesce(co.name::text, ''))
FROM user u
JOIN company co
On co.contact_id = cc.id
WHERE u.contact_id = cc.id