我想在多个表中搜索多个列。像这样: 给出表格:
用户 ID 名字 姓 电子邮件
公司 用户身份 地址
土地 名称 COMPANY_ID
让我们说用户是在美国华盛顿工作的Johny Bravo(johny.bravo@gmail.com)。 我想根据查询找到记录 "吃" - >来自美国,或 " RAV"来自Bravo
当我输入" rav"我的Johny Bravo排名高于Johny Bravos和其他电子邮件,因此它是第一个结果
如何实现此类功能? 我看过ts_vector和ts_rank,但它似乎只支持正确的通配符(" to_tsquery(' Brav:*')")会起作用,我也不会# 39;需要全文搜索功能(我会查找地址和用户名,所以不需要别名等)我可以进行通配符搜索,但后来我必须手动计算应用程序中的排名
答案 0 :(得分:1)
您可以使用pg_trgm extension。
您必须安装contrib,然后安装扩展程序:
create extension pg_trgm;
然后你可以创建三元组索引:
create index user_idx on user using gist (user_data gist_trgm_ops);
然后你可以查询哪个会给你前10个最相似的值:
select * from user order by user_data <-> 'rav' limit 10;
请注意,您可以使用不可变函数替换user_data
,该函数可以将所有信息连接到一个(文本)字段,从而可以在更多字段中进行搜索。
要获得“排名分数”,您可以使用similarity
function,其中相同的字符串返回1,完全不相关的返回0。
如果您需要跨整个数据库进行全文搜索,则更好的解决方案可能是单独的搜索工具,例如Apache Solr。