You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何运行包含返回记录集函数的嵌套查询以解析文本词干?

解决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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:41:07