使用gin索引和sqlalchemy返回排名的搜索结果

2024-06-02 06:46:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我为全文搜索设置了一个GIN索引。我想得到与搜索查询匹配的记录列表,按等级排序(记录与搜索查询匹配的程度)。对于结果,我只需要记录及其列,而不需要用于排序的实际秩值。在

我有以下查询,它运行良好,并从postgresql数据库返回预期结果。在

SELECT *, ts_rank('{0.1,0.1,0.1,0.1}', users.textsearchable_index_col, to_tsquery('smit:* | ji:*')) AS rank
FROM users
WHERE users.authentication_method != 2 AND users.textsearchable_index_col @@ to_tsquery('smith:* | ji:*') ORDER 
BY rank desc;

我想使用sqlalchemy(SA)执行这个查询。我知道'ts'u rank'不能在SA中使用。我试过很多事情,比如

^{pr2}$

同时也阅读了关于使用column property,尽管我不确定是否/如何在解决方案中使用它。在

希望能朝着正确的方向努力。在


Tags: to列表index排序记录sacolusers
1条回答
网友
1楼 · 发布于 2024-06-02 06:46:59

您可以通过使用SQLAlchemyfunc在查询中使用SQL函数

from sqlalchemy.sql.expression import func

(db.session.query(User, func.ts_rank('{0.1,0.1,0.1,0.1}', User.textsearchable_index_col, func.to_tsquery('smit:* | ji:*')).label('rank'))
    .filter(User.authentication_method != 2)
    .filter(User.textsearchable_index_col.op('@@')(func.to_tsquery('smit:* | ji:*')))
    .order_by('rank desc')
).all()

相关问题 更多 >