1

我的系统存储来自许多不同电子商店的产品,我需要根据产品名称对产品进行配对。例如:

INPUT: MySQL 表产品

id | name                       | id_seller
1    porsche 911 red edition      1
2    red porsche 911 gt           2
3    icecream                     1

期望输出:建议产品 1 与产品 2 相似。

在第一步中,仅就常用词的数量提出建议就足够了——在这个保时捷示例中,4 个词中的 3 个。

更复杂的解决方案将涉及比较单词的顺序,而不仅仅是它们的出现,但我想这不会是微不足道的。

是否可以仅使用 MySQL 查询及其内置函数或必须使用任何复杂的库/附加组件来完成?

4

1 回答 1

2

这是一个SQLFiddle 示例,用于查找列中至少有一个常用词的产品对name

select t.id id1, t.name name1, t1.id id2, t1.name  name2 from t
join t t1
where t.id<t1.id
      AND
      t.name regexp 
        CONCAT('([[:<:]]',
               REPLACE(
                   TRIM(t1.name),
                   ' ',
                   '[[:>:]]|[[:<:]]'
               ),
               '[[:>:]])');

如果您需要查找至少包含 N 个常用词的行,则应创建 tmp 表,将每行拆分为单词。这是一个示例和执行此操作的存储过程。对于您的示例,此表如下所示:

id | name                       
1    porsche
1    911
1    red
1    edition      
2    red
2    porsche
2    911
2    gt           
3    icecream                     

在这种情况下,您可以使用以下查询来查找具有至少 N 个常用词的 id(在这种情况下 N=3):

select t1.id,t2.id,count(*)
from tmp t1,tmp t2
where t1.id<t2.id and t1.name=t2.name
group by t1.id,t2.id having count(*)>=3
于 2012-09-21T12:21:54.387 回答