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

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

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

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

最佳答案

也许它会帮助你。带有“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;

关于Postgresql全文(pg_trgm)更好地处理精确匹配?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14597265/

10-13 00:49