Postgresql 如何转换tsvector?
一个典型的和相关的应用是查询和总结有关出现词集及其频率的信息。。。JSONB是表示这些“查询应用程序”的数据类型的自然选择(!)。。。所以 有一个简单的解决方法可以将tsvector转换为JSONB 示例:计算缓存tsvectot的单词的全局频率类似于此查询Postgresql 如何转换tsvector?,postgresql,jsonb,tsvector,Postgresql,Jsonb,Tsvector,一个典型的和相关的应用是查询和总结有关出现词集及其频率的信息。。。JSONB是表示这些“查询应用程序”的数据类型的自然选择(!)。。。所以 有一个简单的解决方法可以将tsvector转换为JSONB 示例:计算缓存tsvectot的单词的全局频率类似于此查询 SELECT r.key as word, SUM(r.value) as occurrences FROM ( SELECT jsonb_each(kx_tsvectot::jsonb) as r FROM terms )
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;
您可以使用功能,它将为您提供所需的一切
单词文本-词素的值ndoc整数-单词出现在文档中的文档数(tsvectors)
ENTERYinteger-单词出现的总数 例如:
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,可以使用castword
fromtext-to-jsonb 您可以使用功能,它将为您提供所需的一切
单词文本-词素的值ndoc整数-单词出现在文档中的文档数(tsvectors)
ENTERYinteger-单词出现的总数 例如:
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
word
fromtext-to-jsonb 谢谢你的帮助!没有提及,所以+1被提及,并以一种说教的形式向读者公开使用(!)。。。这不是公认的答案,只是因为它不是“我的梦”:-)梦是对内部二进制表示的简单快速转换,非常相似,因此需要快速转换。让我们看看另一个是否显示了问题的更多线索。好吧,在这种情况下,您需要首先执行以下操作((tsvector_val)::TEXT,但技巧是使用regexp_split__to_array()
从TEXT
获取所有词素,然后执行cast toJSONB
并使用count()进行聚合@PeterKraussYes,这是可行的,但是正则表达式转换比简单的内部转换占用更多的CPU,我已经解释过了。。。二进制信息在那里,没有理由不使用它。感谢帮助!没有提及,所以+1被提及,并以一种说教的形式向读者公开使用(!)。。。这不是公认的答案,只是因为它不是“我的梦”:-)梦是对内部二进制表示的简单快速转换,非常相似,因此需要快速转换。让我们看看另一个是否显示了问题的更多线索。好吧,在这种情况下,您需要首先执行以下操作((tsvector_val)::TEXT,但技巧是使用regexp_split__to_array()
从TEXT
获取所有词素,然后执行cast toJSONB
并使用count()进行聚合@PeterKraussYes,这是可行的,但是正则表达式转换比简单的内部转换占用更多的CPU,我已经解释过了。。。二进制信息就在那里,没有理由不使用它。