如何解决Postgres:如何在生成的列中包含权重?
我有以下架构:
CREATE TABLE books (
title VARCHAR(255),subtitle TEXT
);
ALTER TABLE books ADD COLUMN full_text_search TsveCTOR
GENERATED ALWAYS AS (to_tsvector('english',coalesce(title,'') ||' '||
coalesce(subtitle,'')
)) STORED; -- ✅ Working
现在我想添加权重但它不起作用:
ALTER TABLE books ADD COLUMN full_text_search_weighted TsveCTOR
GENERATED ALWAYS AS (to_tsvector('english',setweight(coalesce(title,''),'A') ||' '||
setweight(coalesce(subtitle,'B')
)) STORED; -- ❌ Not working
有没有办法在 postgres 的生成列中包含权重?
转载链接:https://www.db-fiddle.com/f/4jyoMCicNSZpjMt4jFYoz5/1385
解决方法
阅读 docs 后,我发现 setweight
正在返回 tsvector
。我不得不像这样修改它:
ALTER TABLE books ADD COLUMN full_text_search_weighted TSVECTOR
GENERATED ALWAYS AS (
setweight(to_tsvector('english',coalesce(title,'')),'A') ||' '||
setweight(to_tsvector('english',coalesce(subtitle,'B')
) STORED; -- ✅ Working
现在我们可以使用以下查询对结果进行排序:
SELECT ts_rank(full_text_search_weighted,plainto_tsquery('english','book')),title,subtitle
FROM "books"
WHERE full_text_search_weighted @@ plainto_tsquery('english','book')
ORDER BY ts_rank(full_text_search_weighted,'book')) DESC;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。