Postgresql全文(pg_trgm)更好地处理精确匹配?

Bin*_*gic 5 postgresql full-text-search

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

SELECT * FROM venues WHERE venues.name % 'Philips Arena' ORDER BY similarity(venues.name, 'Philips Arena') DESC
Run Code Online (Sandbox Code Playgroud)

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

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

小智 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;
Run Code Online (Sandbox Code Playgroud)