1

我有一个大型 INNODB 数据库,上面有超过 200 万种产品。“产品”表具有以下字段:id、title、description、category。

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

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

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

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

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

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

4

1 回答 1

1

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

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

如果升级不是一个选项,请参阅我以前的答案,我建议解决方法。

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

它通过执行两次搜索来工作,其中第二次搜索的搜索短语是原始搜索短语与第一次搜索中最相关的少数文档相连接。因此,如果其中一个文档包含单词“databases”和单词“MySQL”,则第二次搜索会找到包含单词“MySQL”的文档,即使它们不包含单词“database”</p>

于 2013-07-19T09:04:41.517 回答