postgresql - 将多行的 tsvector 合并为一个
问题描述
我有一个带有文本字段的表和一个tsvector
包含该字段的搜索索引的表:
CREATE TABLE test (pk bigint, value text, tsv tsvector);
如何创建一个tsvector
满足某些条件的所有行的向量组合的单个?
SELECT value FROM test
WHERE combine_my_vectors(SELECT tsv FROM test WHERE pk IN (some list))
@@ to_tsquery('search me');
我知道tsvector
s 可以与 结合使用||
,但这在这里似乎是不可能的。我有什么用combine_my_vectors
?
我宁愿避免先组合我的value
文本字段,然后再创建一个tsvector
。
解决方案
PostgreSQL 的好处在于它的可扩展性非常好。
您可以简单地为此定义自己的聚合:
CREATE AGGREGATE tsvector_agg(tsvector) (
STYPE = pg_catalog.tsvector,
SFUNC = pg_catalog.tsvector_concat,
INITCOND = ''
);
你可以像这样使用它:
SELECT tsvector_agg(tsv) FROM test;
当然,您不能为此使用全文搜索索引,因为匹配的值不属于单行。
推荐阅读
- reactjs - Material-UI 颜色道具选项
- sql - hibernate 只能有一个自动列,它必须定义为一个键
- postgresql - Postgres:将文本转换为时间戳记以进行索引?
- node.js - NodeJS 需要错误“无法重新声明块范围变量 'XXX'”
- css - 如何自定义 WooCommerce 面包屑
- postgresql - 在 Postgres 13.1 中禁用逻辑复制语句的日志记录
- css - 网格元素在 Tailwind CSS 中同时增长
- sockets - 在浏览器和 FastAPI 之间传输音频数据的最佳方式
- python - Python 复制结果与 deepcopy 相同
- javascript - “语法错误:错误:未找到 ESLint 配置”当我尝试 npm run 服务从 GitHub 获得的项目时