如何运行包含返回记录集函数的嵌套查询以解析文本词干?
解决PostgreSQL中ts_debug批量提取词干的问题
嘿,我明白你遇到的问题了——你原来的SQL里,ts_debug是个返回记录集的函数,但你直接把整个strings的text列传给它,PostgreSQL没法处理多行的集合输入,所以才执行失败。
要实现批量从符合条件的文本中提取去重的俄语词干,你需要用LATERAL连接来让ts_debug逐行处理每一条text数据,具体修正后的SQL如下:
WITH strings AS ( SELECT text FROM messages WHERE channel_id = 12345 AND text LIKE '%#%' ) SELECT DISTINCT td.token FROM strings -- 用LATERAL让ts_debug处理strings里的每一行text LATERAL ts_debug('russian', strings.text) AS td WHERE td.alias = 'word';
关键说明:
LATERAL关键字的作用是允许右侧的函数(这里是ts_debug)引用左侧查询(strings)中的列值,这样每一行的text都会被单独传入ts_debug,生成对应的解析记录。- 我们给
ts_debug的结果起了别名td,这样就能在WHERE子句和SELECT子句中引用它的字段(比如alias和token)。 - 最后用
DISTINCT确保提取的词干没有重复。
如果之后你需要关联原文本和提取出的词干,只需要在SELECT里加上strings.text即可,比如:
SELECT DISTINCT strings.text, td.token FROM strings LATERAL ts_debug('russian', strings.text) AS td WHERE td.alias = 'word';
内容的提问来源于stack exchange,提问作者expert
相关产品推荐
相关产品推荐

