如何转换tsvector?

时间:2016-03-16 14:08:07

标签: postgresql jsonb tsvector

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;

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