与trigram相似度算子的多列相似性比较%

时间:2016-11-01 17:17:43

标签: string postgresql fuzzy-comparison fuzzy trigram

我需要使用trigram相似度运算符%在PostgreSQL中执行模糊匹配过滤(在WHERE子句中)。 为了比较字段对,它只是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索引。 但是,由于各种原因,我对这个解决方案不满意,我想知道是否有另一种方法与trigram运算符(%)进行多列相似性比较,其中将使用单个字段GIN或GIST索引?

1 个答案:

答案 0 :(得分:0)

我已经尝试了一下,是的,GIN索引可以构建在这样的表达式上。 这里也提到:Facility for rendering a partial template from a tag helper