Mysql Postgresql中分数/等级的全文查询

Mysql Postgresql中分数/等级的全文查询,mysql,postgresql,full-text-search,Mysql,Postgresql,Full Text Search,我是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; Postgres全文搜索与MySQL全文搜索略有不同。它有更多的选择,但

我是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;

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

本文档将告诉您如何对搜索结果进行排名,但我强烈建议您阅读手册的全文部分,了解如何使用它:

基本上,与您的查询等价的是:

SELECT pictures.id, ts_rank_cd(textsearch, 'phrase') AS score
FROM pictures
ORDER BY score DESC
正如您所看到的,这使用了文本搜索,这是您必须定义自己的东西。简短版本如下:

查询基本上非常简单:

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

谢谢你,沃尔夫。起初它看起来很难理解,但最终我让它工作了。什么是文本搜索?至少它不是一个列名。文档有助于省略这个细节。@timmm:文档在这方面可能有点难读。你可以这样创建一个向量:选择“英语”,“一只肥猫坐在垫子上-它吃了一只肥鼠”;是的,我不知道如何在一个查询中获得tsvector和秩,并按秩排序。你能做一个完整的例子,比如选择pictures.id,ts_rank_cdtsv,查询图片中的分数,到_tsquery'phase'查询,选择到_tsvectorpictures.title作为图片中的tsv。。。。好吧,这让人困惑。我所要做的就是将分数作为查询中的一列,这样我就可以根据它进行排序和筛选。我不断收到关于列不存在或无法使用相同级别的内容的错误。。。也许我应该把这个问题作为一个新问题发布。太棒了,谢谢!另外请注意,根据文档,您的索引不会被使用,因为您在查询中没有使用“english”。