我是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'中的第一行文本。我需要它来查看排名搜索返回的所有行
答案 0 :(得分:0)
结束创建自己的排名功能,并将该文本搜索的结果插入另一个带有串行增量列的表中。
使用以下代码填充新表(ranking_results)的值:
INSERT INTO ranked_results(sentence) VALUES (columnRanking());
我还必须创建一个函数,在插入更多行时删除/重置新表中的列。
TRUNCATE table ranked_results RESTART IDENTITY;