Postgresql中相似字符串的计数

Postgresql中相似字符串的计数,postgresql,grouping,similarity,Postgresql,Grouping,Similarity,我有一个表,其中包含Postgresql中搜索词的列表以及搜索它们的次数: 我试图写一个查询,将它们分组在一起,也就是说,我希望看到电动滑板车已经被搜索了27次,而不是20次,其中一次有4次拼写错误,另一次有3次拼写错误。我想使用相似性函数,这样我就可以发挥极限 我一直在尝试按照相似性进行分组,但没有成功: SELECT search_term, SUM(count) FROM t2 GROUP BY (SELECT set_limit(0.8); SELECT similarity(

我有一个表,其中包含Postgresql中搜索词的列表以及搜索它们的次数:

我试图写一个查询,将它们分组在一起,也就是说,我希望看到电动滑板车已经被搜索了27次,而不是20次,其中一次有4次拼写错误,另一次有3次拼写错误。我想使用相似性函数,这样我就可以发挥极限

我一直在尝试按照相似性进行分组,但没有成功:

SELECT 
search_term,
SUM(count)

FROM 
t2

GROUP BY (SELECT set_limit(0.8);

SELECT similarity(n1.search_term, n2.search_term) AS sim, n1.search_term, n2.search_term
FROM   t2 n1
JOIN   t2 n2 ON n1.search_term <> n2.search_term
               AND n1.search_term % n2.search_term
ORDER  BY sim DESC)

非常感谢您的帮助

值0.8是不够的。因为在你的例子中相似性是0.6甚至更多

请尝试此查询

SELECT sim, ss, sum(countt)
  FROM (
    SELECT sim, '|'||string_agg(s1,  '|')||'|' ss
      FROM (
        SELECT similarity(n1.search_term, n2.search_term) AS sim, 
               n1.search_term s1, n2.search_term s2
          FROM t1 n1
          JOIN t1 n2 ON n1.search_term <> n2.search_term
           AND n1.search_term % n2.search_term
           ) t2    
     WHERE sim > 0.6
     GROUP BY sim 
       ) t3
  LEFT JOIN t1 n3 ON ss like '%|'||n3.search_term||'|%' 
 GROUP BY ss, sim
 ORDER BY sim DESC

这里是我的示例-

嘿,谢谢您的帮助,但这并没有真正起作用,因为如果您尝试向模式中添加更多术语,它们就会丢失。例如,试一下:“电动滑板车”,3,“电动滑板车”,4,“电动滑板车”,20,“公路自行车”,5,“摄像头”,15,“5D摄像头”,12,“赛格威长板”,15,“助力长板”,15@用户10670868您可以检查链接。有数据。但是,相似性值可能很低