我正在我的代码库中尝试pg_trgm来进行搜索。到目前为止,它对> 4个字符的搜索查询效果很好,考虑到pg_trgm的工作方式,这是有意义的。
然而,在几种情况下,两个字符长的查询不会返回精确匹配。例如,查找“L2 Kids”的名称:
SELECT "paid_sessions".* FROM "paid_sessions" WHERE (paid_sessions.name ILIKE '%L2%');
将返回名为“L2 Kids”的行,而pg_trgrm相似性运算符:
SELECT "paid_sessions".* FROM "paid_sessions" WHERE (name % 'L2') ORDER BY similarity(name, 'L2') DESC;
什么也不返回。
在这种情况下,您如何处理这些精确匹配不足?我应该简单地使用ilike搜索少于3个字符吗?我是否应该以某种方式将两者合并结合起来?
1条答案
按热度按时间krugob8w1#
使用默认设置,使用%的查询将返回“L2 kids”。您必须更改pg_trgm.similarity_threshold才能找不到该结果。
我应该简单地使用ilike搜索少于3个字符吗?
你想要ILIKE搜索吗?如果是这样,那么你应该这样做。否则,你不应该。也许你应该使用
%
,但使用不同的阈值。也许你应该使用%>
。也许你需要@@
和tsvectors。一个简单的例子是解释你想要什么的糟糕方式。