如何找到相似的产品

3
我正在使用PHP和MySQL创建价格比较网站。因此,我需要找到类似的产品并映射它们以创建价格比较表。在我的数据库中有10,000多个产品,为了找到相似的产品,我已经在产品名称和描述列中创建了MySQL全文索引,并将产品与其他产品进行比较,但我无法得到期望的结果。例如,如果我搜索“三星Galaxy A7(2017)32GB”,则会获得以下结果:
1. 三星Galaxy A7 32GB(2017) 2. 三星Galaxy A7智能手机 3. 三星Galaxy J7(2017)32GB黑色 4. 三星Galaxy A7 64GB(新款) 5. 三星Galaxy J7 Prime 16GB 6. 三星Galaxy J7(16GB,黑色) 7. 三星Galaxy J2 Pro(16GB) 8. 三星Galaxy A5(32GB) 9. 三星Galaxy S7 Edge 32GB蓝珊瑚
注意:在结果集中,只有前两个和第四个产品是相似的,其他产品不是。
现在,我有一个问题:
如何从搜索查询中找到重要关键字,以便这些关键字至少在其他产品中出现以了解相似性?例如,在上述搜索查询中,“三星Galaxy A7”是重要关键字,应该在结果中的其他产品中出现。我们人类可以知道,“三星Galaxy A7”是从“三星Galaxy A7(2017)32GB”中比较其他产品的重要关键字,但计算机程序如何知道呢?
是否有一种算法可以通过重要关键字比较类似的产品,就像图像比较中的SIFT算法一样?
如果您有任何好的方法来找到相似的产品,请建议我。
3个回答

1

请看一下Elasticsearch,它是一个搜索引擎。

它可以进行关键字搜索,并通过分数返回结果。

您可以通过某些方式提高或降低分数,但它不足以像人类那样确定关键词。

然而,它可以确定您文档中的常用术语(例如“the”,“a”...或者如果有许多型号使用该术语,则为“32gb”),并将这些常用术语的分数调整为较低的分数。(ES常用术语查询

Elasticsearch非常强大(也很复杂),它可能有许多更好的解决方案来处理此问题。

编辑:一个关于“常用术语查询”和“停用词列表”的好文章。停用词可以永久性地排除规格,如果这是您想要的情况。有时,“常用术语查询”在记录数据不足够广泛时无法工作。(例如,三星Galaxy比32GB更频繁)


0

听起来像一个简单的LIKE

SELECT name FROM products WHERE name LIKE 'Samsung Galaxy A7%';

这将选择所有以“三星Galaxy A7”开头的产品。 如果您还想选择那些不是以该名称开头而只包含该名称的产品,请将其更改为

WHERE name LIKE '%Samsung Galaxy A7%'

这并不像你想象的那么简单。计算机程序如何知道在查询“三星Galaxy A7(2017)32GB”时使用“三星Galaxy A7”关键词进行搜索? - jay padaliya

0

我认为我会通过空格将它们分开,去掉空格,并将所有单词包装在 LIKE %str% AND 周围 - 就像这样:

$search='Samsung Galaxy A7 (2017) 32gb';
$split=preg_split('/\s+/u',$search);
$query='SELECT * FROM tbl WHERE ';
foreach($split as $str){
    $query.='`name` LIKE \'%'.$db->real_escape_string($str).'%\' AND ';
}
$query=substr($query,0,-strlen(' AND '));
var_dump($query);
  • 输出类似于 SELECT * FROM tbl WHERE `name` LIKE '%Samsung%' AND `name` LIKE '%Galaxy%' AND `name` LIKE '%A7%' AND `name` LIKE '%(2017)%' AND `name` LIKE '%32gb%' (测试代码:https://3v4l.org/30llU

但我敢打赌,肯定有专门的 PHP 搜索库已经解决了这些问题...可能吧。


不,这不是通过任何简单的AND或OR SQL查询来完成的。因为您还在SQL条件中使用了“(2017) 32gb”关键字。所以产品“三星Galaxy A7智能手机”将不会出现在结果中,但该产品是相似的。而且您不能在条件中使用OR,因为产品“三星Galaxy J7 Prime 16gb”并不相似。 - jay padaliya

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接