【发布时间】:2015-07-13 18:45:24
【问题描述】:
我是 PostgreSQL 新手,我正在开发一个函数来返回搜索词的词位置。
我想首先缩小搜索必须经过的文本字段,以确保它是来自数据库的相关结果。
我的表名是“testing”,然后文本字段列称为“context”,它所在的行号称为“line_number”。其中上下文文本与特定 line_number 相关联。
现在我的排名代码如下所示:
select line_number into lineLocation
from (
SELECT
testing.line_number,
ts_rank_cd(to_tsvector('english', testing.context),
to_tsquery('Cats & Dogs & Kids')) AS score
FROM Testing
) ranking
WHERE score >0
ORDER BY score DESC;
Return QUERY select * from lineLocation;
当我尝试将 lineLocation 作为返回查询打印出来时,它会报告新的排名行号 22、19、21、20、17、13,每一个都在自己的列中返回。
我现在的问题是我想在每一行 (22 ... 13) 中搜索像“狗”这样的关键词并返回它的位置
使用以下方法获取文本:
select context into sample from testing
where testing.line_number = lineLocation;
如果我尝试在 lineLocation -i 这样的循环中减少 lineLocation 它出现故障,最终会搜索不相关的上下文。
我可以使用任何类型的“读取下一行”功能吗? 我正在寻找一种方法来遍历排名结果行号
编辑然后我继续使用 for 循环,我希望它从排名结果中读取列上下文中的所有文本行
我遇到的问题是它只读取“上下文”列中的第一行文本,我需要它来查看排名搜索返回的所有行
【问题讨论】:
-
有什么理由不想在一个查询中完成所有这些操作?
-
一站式查询是什么意思?
-
好吧,为什么要先将数据存入
lineLocation。 -
我明白你在说什么@JakubKania。 ' select context into sample ' 所以我不需要使用 lineLocation。然而它仍然没有读完所有的上下文行,它只读取了列的第一行
标签: postgresql plpgsql ranking postgresql-9.4