如何解决Postgresql - 与三元组的相似性 (pg_trgm)
我目前正在我的应用上实现搜索功能。我有一个包含用户名和全名字段的用户表。我想搜索具有最佳相似性的用户(从用户名或全名)。我在 stackoverflow 上搜索了很多,我发现了一个非常高效的实现: https://stackoverflow.com/a/44856792/5979369
SELECT username,email,full_name,similarity(username,'mar') AS s_username,similarity(full_name,'mar') AS s_full_name,row_number() OVER () AS rank -- greatest similarity first
FROM user
WHERE (username || ' ' || full_name) % 'mar' -- !!
ORDER BY (username || ' ' || full_name) <-> 'mar' -- !!
LIMIT 20;
我有一个用户名是 mariazirita,但是当我使用这个查询搜索 mar 时,它不会返回任何内容。如果我搜索 maria,它已经返回用户。
当我搜索 mar 或 ma 时,我可以做些什么来改进此查询以返回用户?
谢谢
解决方法
这里的问题是 %
运算符。仅当相似度超过 pg_trgm.similarity_threshold
参数(默认为 0.3)时才会返回 TRUE。
SELECT similarity('mariazirita','mar');
similarity
════════════
0.23076923
(1 row)
SELECT similarity('mariazirita','maria');
similarity
════════════
0.3846154
(1 row)
因此,您可以使用 %
从查询中降低阈值或删除条件。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。