阅读 PostgreSQL 排名结果

Reading through PostgreSQL ranked results

我是 PostgreSQL 的新手,我正在研究 return 搜索词的词位置的函数。

我想首先缩小搜索必须经过的文本字段范围,以确保它是来自数据库的相关结果。

我的 table 名称是 '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 作为 return 查询打印出来时,它会报告新排名的行号 22,19,21,20,17,13 每个 returned自己的专栏。

我现在的问题是我想在每一行 (22 ... 13) 中搜索关键字 "dog" 和 return 其位置

使用以下方法获取文本:

select context into sample from testing
  where testing.line_number = lineLocation;

如果我尝试在像 lineLocation -i 这样的循环中减少 lineLocation 它出了问题,最终会搜索不相关的上下文。

有什么类型的 'read next line' 函数可以使用吗? 我正在寻找一种方法来遍历排名结果行号

EDIT 然后我继续使用 for 循环,我希望它从排名结果中读取列上下文中的所有文本行

我遇到的问题是它只读取列 'context' 中的第一行文本,我需要它查看由 return 编辑的所有行排名搜索

最终创建了自己的排名函数,并将该文本搜索的结果插入到另一个具有序列增量列的 table 中。

使用以下代码填充新 table (ranked_results) 的值:

INSERT INTO ranked_results(sentence) VALUES (columnRanking()); 

我还必须创建一个函数来 delete/reset 插入更多行后新 table 中的列。

TRUNCATE table ranked_results RESTART IDENTITY;