回答

收藏

在Postgresql有分数/排名的FULLTEXT查询

技术问答 技术问答 246 人阅读 | 0 人回复 | 2023-09-14

我是Postgres新手,我不知道怎么做MySQL查询转换为Postgres:
7 S; J; V+ c- a! x& i- FSELECT pictures.id,MATCH (title,cached_tag_list) AGAINST ('phrase') AS score FROM pictures WHERE MATCH (title,cached_tag_list) AGAINST ('phrase') ORDER BY score DESC;               
! @& n# T4 r" i9 `! K# s* R    解决方案:                                                               
, h4 c. R3 M! p! y                                                                Postgres全文搜索与MySQL全文搜索略有不同。它有更多的选择,但以你喜欢的方式工作可能更困难。
5 p- w1 f5 L% S6 P; L文档告诉你如何排名搜索结果,但我强烈建议你阅读手册的全文,以了解如何使用它:http : //www.postgresql.org/docs/current/ Interactive / textsearch-controls.html#TEXTSEARCH-RANKING
! K4 e& B4 q3 F  d/ j. w+ o3 J( ?基本上,你的查询会是这样的:# }# C/ x0 T6 M% Q: f+ {8 n
``" @% g1 U- j/ T+ ^+ w/ Y
SELECT pictures.id,ts_rank_cd(textsearch,‘phrase’) AS score/ M. d& I; `4 [& X" u/ J9 k6 }
FROM pictures
1 d- ~% D1 J$ s  q2 K" I( NORDER BY score DESC3 T# w; E% A, _# E' O
如你所见,这将被使用textsearch你必须定义的东西。请阅读简短版本:http : //www.postgresql.org/docs/current/interactive/textsearch-tables.html查询本质上很简单:SELECT pictures.id,ts_rank_cd(to_tsvector(‘english’,pictures.title),‘phrase’) AS score/ K2 i8 U+ Y" E# m  @: G
FROM pictures
  X, n& e: D6 a) M! IORDER BY score DESC
, S4 \& A7 B3 `8 c( g. s: B7 W但我强烈建议您添加索引:CREATE INDEX pictures_title ON pictures USING gin(to_tsvector(‘english’,title));* o, a* ~9 o/ X* V2 g- n4 ]- J4 v
```
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则