我尝试只从unnested ts\u vector列中选择词汇:
select lexeme from (select unnest(to_tsvector('russian', description)) from cards) as roots;
但是它不起作用,因为sql对 lexeme 列。我怎样才能只从未赋值的ts\u向量中选择词素?
lexeme
yebdmbv41#
你发现自己:
SELECT (unnest(to_tsvector(description))).lexeme FROM cards;
具有集合返回函数的等价标准sql形式 FROM 列表稍显冗长,但更容易集成到更大的查询中:
FROM
SELECT d.lexeme FROM cards c LEFT JOIN LATERAL unnest(to_tsvector(c.description))) d;
相关:在postgresql中,横向查询和子查询有什么区别?
自从postgres9.6以来,还有第二个“过载”的变体 unnest() . 引用发行说明:为添加新函数 tsvector 数据(stas kelvich)新功能包括 ts_delete() , ts_filter() , unnest() , tsvector_to_array() , array_to_tsvector() ,以及 setweight() 仅为指定词素设置权重的。我的。请参见:
unnest()
tsvector
ts_delete()
ts_filter()
tsvector_to_array()
array_to_tsvector()
setweight()
SELECT proname, proargtypes::regtype[], prorettype::regtype FROM pg_proc where proname = 'unnest';
proname | proargtypes | prorettype --------+------------------+----------- unnest | [0:0]={anyarray} | anyelement unnest | [0:0]={tsvector} | record (2 rows)
db<>在这里摆弄该功能记录在文本搜索功能手册中:
unnest(tsvector, OUT lexeme text, OUT positions smallint[], OUT weights text)
它回来了 setof record 具有命名的输出列。因此我们可以参考专栏 lexeme 就像我们做的那样。
setof record
qpgpyjmq2#
我找到了一个简洁的方法:
SELECT (unnest(to_tsvector(description))).lexeme FROM cards
2条答案
按热度按时间yebdmbv41#
你发现自己:
具有集合返回函数的等价标准sql形式
FROM
列表稍显冗长,但更容易集成到更大的查询中:相关:
在postgresql中,横向查询和子查询有什么区别?
为什么?怎样?
自从postgres9.6以来,还有第二个“过载”的变体
unnest()
. 引用发行说明:为添加新函数
tsvector
数据(stas kelvich)新功能包括
ts_delete()
,ts_filter()
,unnest()
,tsvector_to_array()
,array_to_tsvector()
,以及setweight()
仅为指定词素设置权重的。我的。
请参见:
db<>在这里摆弄
该功能记录在文本搜索功能手册中:
它回来了
setof record
具有命名的输出列。因此我们可以参考专栏lexeme
就像我们做的那样。qpgpyjmq2#
我找到了一个简洁的方法: