0

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;
4

1 回答 1

3

您可以使用ts_stat()函数,它将为您提供您所需要的

word text — 词位
ndoc的值integer — 文档数 (tsvectors) 单词出现在
nentry中integer — 单词出现的总次数

示例可能如下:

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,您可以使用 cast wordfrom text to jsonb

于 2016-03-16T16:03:25.970 回答