【问题标题】:Reading through PostgreSQL ranked results阅读 PostgreSQL 排名结果
【发布时间】: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


【解决方案1】:

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

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

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

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

TRUNCATE table ranked_results RESTART IDENTITY;

【讨论】:

    猜你喜欢
    • 2017-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多