使用三元组相似性运算符%进行多列相似性比较



我需要执行模糊匹配过滤(在WHERE子句)在PostgreSQL中使用三元组相似操作符%。对于比较字段对,只需使用table1.field1 % table2.field2和GIN或GIST索引就可以显著提高性能。然而,我需要一次比较一堆字段,最后的结论应该基于总体相似性。为此,我可以使用如下所示的串联表达式:

 (COALESCE (l.field1, ' ')
 || ' ' ||  COALESCE (l.field2,' ')
 || ' ' ||  COALESCE (l.field3,' ')
 || ' ' ||  COALESCE (l.field4,' ')
) % (COALESCE (r.field1, ' ')
 || ' ' ||  COALESCE (r.field2,' ')
 || ' ' ||  COALESCE (r.field3,' ')
 || ' ' ||  COALESCE (r.field4,' '))

该表达式不能在单个字段上使用GIN或GIST索引,性能较差。当然,一个明显的解决方案是在两个表中创建新的连接字段,在它们上创建GIN索引,然后比较连接的字段。

l.concatenated_field % r.concatenated_field

在本例中,使用了GIN或GIST索引。但是,由于各种原因,我对这个解决方案不满意,我想知道是否有一种替代方法来执行与三元运算符(%)的多列相似性比较,其中将使用单个字段GIN或GIST索引?

我做了一些实验,是的,可以在这样的表达式上构建GIN索引。这里也提到了:https://niallburkley.com/blog/index-columns-for-like-in-postgres/

最新更新