You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL问题咨询:浮点值及全文搜索ts_rank均返回0

我来帮你逐个搞定这两个PostgreSQL的问题:

问题1:查询中所有条目的浮点值始终返回0?

这大概率是整数除法搞的鬼!PostgreSQL里如果两个整数做除法运算,结果会自动截断小数部分,只保留整数。比如你写SELECT 3 / 4,得到的结果是0而不是0.75。

解决方法很简单,只要把其中一个操作数转换成浮点类型就行:

  • 用类型转换语法:SELECT column1::FLOAT / column2 FROM your_table;
  • 或者直接给数字加.0:SELECT column1 / column2.0 FROM your_table;
    这样就能得到正确的浮点结果啦。
问题2:全文搜索ts_rank始终返回0?

看你贴的查询语句,问题出在to_tsvector('microposts.content')这部分!你给microposts.content加了单引号,PostgreSQL会把它当成一个普通的字符串字面量(也就是把字符串"microposts.content"本身转成tsvector),而不是去读取microposts表中content字段的内容。这样自然匹配不到'sit'的查询,rank肯定都是0。

只要去掉单引号就行,修正后的查询应该是这样:

my_app_development=# SELECT content, ts_rank(to_tsvector(microposts.content), query) AS rank FROM microposts, to_tsquery('sit') query WHERE microposts.content @@ query ORDER BY rank DESC LIMIT 10;

如果你的内容是英文的,建议加上文本搜索配置(比如'english'),这样分词和匹配会更准确:

my_app_development=# SELECT content, ts_rank(to_tsvector('english', microposts.content), query) AS rank 
FROM microposts, to_tsquery('english', 'sit') query 
WHERE to_tsvector('english', microposts.content) @@ query 
ORDER BY rank DESC LIMIT 10;

另外,如果你想要更精准的排名,可以试试ts_rank_cd函数,它会考虑词的位置距离,排名结果会更贴合实际需求。

内容的提问来源于stack exchange,提问作者Lee Eather

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:17:27