我想基于id(1-111.1x)和我的行的名称字段构建一个tsvector,所有这些都来自触发器和 tsvector_update_trigger(tsv,' pg_catalog.german' ,id,name)。
但我的身份最终被切断了,就像' -111.1'而不是' 1-111.1x'。
有没有办法自定义转换,以便保留id字段(或应用某些操作,如lower()),同时名称字段被正确转换?
像这样的东西(由于setweight需要一个tsvector,它不起作用)?
CREATE FUNCTION tsv_trigger() RETURNS trigger AS $$
begin
new.tsv :=
setweight(new.id, 'A') ||
setweight(to_tsvector('pg_catalog.german', coalesce(new.name,'')), 'D');
return new;
end
$$ LANGUAGE plpgsql;
CREATE TRIGGER TS_tsv
BEFORE INSERT OR UPDATE ON "model"
FOR EACH ROW EXECUTE PROCEDURE
tsv_trigger();
谢谢!
答案 0 :(得分:0)
我最终创建了另一个字段' _id',这是对' id'的标准化代表。 (因此,而不是' 1-111' - >' 1111')。然后必须删除搜索输入' - ','。',用空字符串替换它们。
当然我们需要小心,因为有时剥离某些字符可能不合适;我创建了一个正则表达式模式,只在匹配的ID中删除它们,但不在文本中删除。
就我而言,这似乎是一个可行的解决方案,尽管它只是一种解决方法。我很乐意提出真正的解决方案。