如何找到类似的产品

时间:2017-07-29 08:10:57

标签: php mysql string text-processing keyword-search

我在php和mysql中创建价格比较网站。所以我需要找到类似的产品并将其映射到创建价格比较表。在我的数据库中有10,000多种产品可供使用,所以为了找到类似的产品,我在产品名称和描述列中创建了mysql全文索引,并将产品与其他产品进行比较,但我无法获得所需的结果,例如,如果我搜索

搜索“Samsung Galaxy A7(2017)32gb”,获得结果:

  1. 三星Galaxy A7 32gb(2017)
  2. 三星Galaxy A7智能手机
  3. 三星Galaxy J7(2017)32gb Black
  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 Blue Coral
  10. 注意:在结果集中,只有前两个和第四个产品相似,而不是其他产品

    现在,我有疑问:

    如何从搜索查询中找到重要的关键字,以便至少在其他产品中需要关键字来了解相似性?例如在上面的搜索查询“三星Galaxy A7”是重要的关键字,并且应该在其他产品中需要结果。我们人类可以知道,“三星Galaxy A7”是来自“三星Galaxy A7(2017)32gb”的重要关键词与其他产品比较,但怎么能知道计算机程序?

    有一种算法可以比较类似产品的重要关键字,就像图像比较中的筛选算法一样。

    如果您有任何寻找类似产品的好方法,请建议我

3 个答案:

答案 0 :(得分:1)

浏览Elasticsearch这是一个搜索引擎。

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

你可以在某些方面提升或减分, 但是,确定类似人类的关键词还不够聪明。

但是,它可以确定您文档中的常用字词(例如'' a' ...或者' 32gb'如果有很多型号使用这个术语。)并调整这些常用术语的分数以降低分数。 (ES common terms query

Elasticsearch功能强大(因此它的复杂性),它可以为这个主题提供更多更好的解决方案。

编辑:一个很好的article关于"常见字词查询"和"停用词列表"。如果您需要,停用词可以永久排除规范。有时,"常用术语查询"如果记录数据不够广泛,它将无法工作。 (例如:三星Galaxy比32gb更频繁)

答案 1 :(得分:0)

听起来像一个简单的 LIKE

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

这将选择所有以“Samsung Galaxy A7”开头的产品。 如果您还要选择那些不以#1开头但只包含该名称的人,请将其更改为

WHERE name LIKE '%Samsung Galaxy A7%'

答案 2 :(得分: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,这些问题已经解决了......可能