我有一张桌子"食谱"列名为" name"," description","准备"。 为了启用全文搜索,我做了:
ALTER TABLE recipes ADD COLUMN recipes_searchtext TSVECTOR;
CREATE INDEX idx_recipes_searchtext_gin ON recipes USING GIN(recipes_searchtext);
UPDATE recipes SET recipes_searchtext =
setweight(to_tsvector('german',name), 'A') ||
setweight(to_tsvector('german',description), 'B') ||
setweight(to_tsvector('german',preparation), 'C');
我是PostgreSQL的新手,但据我所知,经过一些测试,这对我来说很好。
但后来我读到了" COALESCE"处理NULL值。 所以我试过了:
UPDATE recipes SET recipes_searchtext =
setweight(to_tsvector('german',COALESCE(name), 'A')) ||
setweight(to_tsvector('german',COALESCE(description), 'B')) ||
setweight(to_tsvector('german',COALESCE(preparation), 'C'));
导致错误消息的原因
Funktion to_tsvector(未知,字符变化,未知
有人可以给我一个提示我做错了吗?
尊重德克
答案 0 :(得分:1)
看起来你的括号在错误的地方。
to_tsvector
最多需要2个参数,但是你现在拥有它的方式是3个。
这应该解决它:
UPDATE recipes SET recipes_searchtext =
setweight(to_tsvector('german',COALESCE(name)), 'A') ||
setweight(to_tsvector('german',COALESCE(description)), 'B') ||
setweight(to_tsvector('german',COALESCE(preparation)), 'C');
但是,我发现您的查询之间没有区别。 coalesce
如果其所有参数均为null
,则会返回null
。如果您愿意,可以提供默认值:coalesce(name, 'Nothing')
如果'Nothing'
为name
null