将用户输入的标题与类别匹配 - 大型INNODB数据库

时间:2013-07-19 08:08:11

标签: php mysql full-text-search matching

我有一个大型的INNODB数据库,其上有超过200万种产品。 'products'表包含以下字段:id,title,description,category。

还有一个名为“类别”的MyISAM表,其中包含网站上使用的所有类别的列表。它包含以下字段:id,name,keywords,parentid。

我的问题更多的是逻辑而不是代码,但我想要实现的目标如下:

当用户在网站上列出新产品时,因为他们正在键入描述,所以应该尝试确定将产品放入哪个类别(准确度很高)。

我最初尝试使用MySQL MATCH()将输入的标题与类别表中的关键字列表进行匹配,但这远非准确。

更好的想法似乎是将用户输入的标题与已存在于数据库中的产品的标题相匹配,按照它们所在的类别对它们进行分组,然后按最大的组对它们进行排序。但是,在INNODB数据库中,我显然不能使用全文,而且我认为2毫米的项目会相当慢吗?

你会怎么做 - 我想它需要与stackoverflow显示类似问题的方式类似吗?

1 个答案:

答案 0 :(得分:1)

如果您在体面的服务器上运行,则200万条记录的全文索引是一个有效选项。初始索引将需要一段时间,这是肯定的,但搜索应该相当快,MySQL可以接受它。

InnoDB从v5.6.4开始支持全文索引。你应该考虑升级。

如果无法升级,请参阅this previous answer of mine我建议的解决方法。

对于您的用例,您可能需要查看WITH QUERY EXPANSION选项:

  

它的工作原理是执行两次搜索,其中第二次搜索的搜索短语是与第一次搜索中几个最高度相关的文档连接的原始搜索短语。因此,如果其中一个文档包含单词“databases”和单词“MySQL”,则第二个搜索会查找包含单词“MySQL”的文档,即使它们不包含单词“database”