You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为含jsonb与普通列的PostgreSQL表创建组合tsvector

结合普通文本列与过滤后的JSONB列创建TSVector

当然可以实现。你只需要分别用to_tsvector处理普通文本列,用带排除键配置的jsonb_to_tsvector处理JSONB列,再通过||操作符把两个TSVector合并成一个即可。

举个实际例子:假设你的表名为my_table,普通文本列是article_content,JSONB列是extra_data,需要排除JSONB里的internal_note和log_id这两个键。

1. 查询时生成合并后的TSVector

SELECT
  to_tsvector('english', article_content) 
  || jsonb_to_tsvector('english', extra_data, '{"exclude_keys": ["internal_note", "log_id"]}') 
  AS combined_fts_vector
FROM my_table;

2. 创建全文索引(优化检索性能)

如果需要频繁做全文检索,建议直接创建基于合并TSVector的GIN索引:

CREATE INDEX idx_my_table_combined_fts ON my_table USING gin (
  (to_tsvector('english', article_content) || jsonb_to_tsvector('english', extra_data, '{"exclude_keys": ["internal_note", "log_id"]}'))
);

说明

  • jsonb_to_tsvector的第三个参数是JSON格式的配置选项,exclude_keys数组里可以指定任意多个需要排除的JSON键。
  • 示例里用的是english分词配置,你可以换成PostgreSQL支持的其他分词配置(比如chinese),或者自定义的配置。

内容的提问来源于stack exchange,提问作者GUZ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 11:33:17