从未赋值的ts\u向量中选择词素

xn1cxnb4  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(315)

我尝试只从unnested ts\u vector列中选择词汇:

select lexeme
from 
    (select unnest(to_tsvector('russian', description))
     from cards) as roots;

但是它不起作用,因为sql对 lexeme 列。我怎样才能只从未赋值的ts\u向量中选择词素?

yebdmbv4

yebdmbv41#

你发现自己:

SELECT (unnest(to_tsvector(description))).lexeme
FROM   cards;

具有集合返回函数的等价标准sql形式 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() 仅为指定词素设置权重的。
我的。
请参见:

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 就像我们做的那样。

qpgpyjmq

qpgpyjmq2#

我找到了一个简洁的方法:

SELECT (unnest(to_tsvector(description))).lexeme
FROM cards

相关问题