5

所以我有一个简单的场景。我有一张场地表(活动场地等)。我的查询看起来像:

SELECT * FROM venues WHERE venues.name % 'Philips Arena' ORDER BY similarity(venues.name, 'Philips Arena') DESC

这在技术上是可行的,我得到飞利浦竞技场作为第一个结果,但我也得到了大量不应该建议的其他结果。比如“TGE Arena”和“LG Arena”。我宁愿他们被排除在外。另外,如果我只搜索“竞技场”,我仍然希望得到建议。但是,如果结果中有明显的异常值,例如上面示例中的 Philips Arena,我只想返回它。

任何想法我怎么能做到这一点?我希望 pg_trgm 有这样的设置。谢谢你的帮助。

4

1 回答 1

0

也许它会帮助你。带有“A”的单词会比其他单词更重要。

SELECT title, ts_rank_cd(fts,q)
FROM titles, to_tsquery('something:B|somebody:B|important:A') q
WHERE fts @@ q ORDER BY ts_rank_cd DESC, Length(title) LIMIT 10;
于 2013-04-05T07:36:14.187 回答