tsvectot的典型和相关应用是查询和汇总有关发生的单词集及其频率的信息...而JSONB是表示tsvectot
数据类型的自然选择(!)对于这些“查询应用程序”......所以,
有一个简单的解决方法可以将 tsvector 强制转换为 JSONB 吗?
示例:计算缓存的tsvectot的单词的全局频率,将类似于此查询
SELECT r.key as word, SUM(r.value) as occurrences
FROM (
SELECT jsonb_each(kx_tsvectot::jsonb) as r FROM terms
) t
GROUP BY 1;
答案 0 :(得分:3)
您可以使用 ts_stat()
功能,它可以满足您的需求
单词 text - lexeme的值
的总出现次数
ndoc 整数 - 单词中出现的文档数量(tsvectors) nentry 整数 - 单词
示例可能如下:
CREATE TABLE t (
tsv TSVECTOR
);
INSERT INTO t VALUES
('word'::TSVECTOR),
('second word'::TSVECTOR),
('third word'::TSVECTOR);
SELECT * FROM
ts_stat('SELECT tsv FROM t');
结果:
word | ndoc | nentry
--------+------+--------
word | 3 | 3
third | 1 | 1
second | 1 | 1
(3 rows)
如果您仍想将其转换为 jsonb ,则可以使用 text 中的强制转换word
转换为 jsonb 。