小编典典

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

sql

我是Postgres的新手,我不知道如何将此MySQL查询转换为Postgres:

SELECT 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;

阅读 216

收藏
2021-04-16

共1个答案

小编典典

Postgres全文搜索与MySQL全文搜索略有不同。它有更多选择,但要以您喜欢的方式工作可能会更加困难。

该文档告诉您如何对搜索结果进行排名,但是我强烈建议您阅读手册的全文部分,以了解如何使用它:http : //www.postgresql.org/docs/current/ Interactive / textsearch-controls.html#TEXTSEARCH-RANKING

基本上,您的查询将是这样的:

``
SELECT pictures.id, ts_rank_cd(textsearch, ‘phrase’) AS score
FROM pictures
ORDER BY score DESC


如您所见,这将使用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
FROM pictures
ORDER BY score DESC


但我强烈建议您也添加索引:

CREATE INDEX pictures_title ON pictures USING gin(to_tsvector(‘english’, title));
```

2021-04-16