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

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

最佳答案

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

关于string - 使用三元组相似度运算符进行多列相似度比较 %,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40365188/

相关文章:

javascript - 为什么我的正则表达式忽略字符串的开头和结尾?

java - Android - 将字符串从 .java 代码提取到 string.xml

SQL 使用 count 或 sum 获取特定结果

python - 模糊匹配一列中的字符串并使用 fuzzywuzzy 创建新数据框

r - 如何匹配两个数据集中的模糊匹配字符串?

c++ - 从控制台线程读取或获取命令

c++ - 如何在 C++ 中将字符串流转换为字符串?

python - Python 2.x 中的 `psycopg2` 是否会阻止 GIL

java - java中的encode(<columnName>, 'escape' ) PostgreSQL等效项是什么?

sql - 模糊匹配两个哈希表?