【问题标题】:Counting number of similar strings in Postgresql在 Postgresql 中计算相似字符串的数量
【发布时间】:2018-11-22 18:09:54
【问题描述】:

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

Search Term Table

我正在尝试编写一个查询,将它们组合在一起,即我希望看到电动滑板车已被搜索 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)

非常感谢任何帮助!

【问题讨论】:

    标签: postgresql grouping similarity


    【解决方案1】:

    值 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
    

    这是我的示例 - http://sqlfiddle.com/#!17/1d705/35

    【讨论】:

    • 嘿,感谢您的帮助,但这并没有真正起作用,因为您尝试向架构中添加更多术语,它们会丢失。例如尝试:('electric scooer',3), ('elecric scooter',4), ('electric scooter',20), ('road bike',5), ('camera',15), ( '5D camera',12), ('segway longboard',15), ('boosted longboard',15);
    • @user10670868 你可以查看sqlfiddle.com/#!17/33cc1/5 链接。有数据。但也许,相似度值很低
    猜你喜欢
    • 1970-01-01
    • 2017-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-05
    • 1970-01-01
    • 2017-10-20
    相关资源
    最近更新 更多