【问题标题】:multiple columns similarity comparison with trigram similarity operator %使用三元相似性算子进行多列相似性比较 %
【发布时间】:2016-11-01 17:17:43
【问题描述】:

我需要在 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 索引。 但是,由于各种原因,我对这个解决方案不满意,我想知道是否有另一种方法可以使用三元运算符 (%) 执行多列相似性比较,其中将使用单个字段 GIN 或 GIST 索引?

【问题讨论】:

  • GIN 表达式索引可以在这样的连接字符串表达式上创建吗?

标签: string postgresql fuzzy-comparison fuzzy trigram


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2012-04-08
    • 2012-12-26
    • 1970-01-01
    • 1970-01-01
    • 2013-06-24
    • 1970-01-01
    • 2020-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多