在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
``` |
|
|
|
|
|