阅读PostgreSQL排名结果

时间:2015-07-13 18:45:24

标签: postgresql plpgsql ranking postgresql-9.4

我是PostgreSQL的新手,我正在开发一个函数来返回搜索词的单词位置。

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

我的表名是'测试'然后文本字段列被称为' 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)中的关键词,例如" dog"并返回其位置

使用以下方法获取该文本:

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

如果我尝试在lineLocation -i之类的循环中减少lineLocation 它失灵了,最终将搜索不相关的上下文。

是否有任何类型的下一行'功能我可以使用? 我正在寻找一种循环排名结果行号的方法

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

我遇到的问题是它只读取了列' context'中的第一行文本。我需要它来查看排名搜索返回的所有行

1 个答案:

答案 0 :(得分:0)

结束创建自己的排名功能,并将该文本搜索的结果插入另一个带有串行增量列的表中。

使用以下代码填充新表(ranking_results)的值:

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

我还必须创建一个函数,在插入更多行时删除/重置新表中的列。

TRUNCATE table ranked_results RESTART IDENTITY;