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

标签 php mysql full-text-search matching

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

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

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

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

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

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

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

最佳答案

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

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

如果升级不是一个选项,请参阅 this previous answer of mine我在其中提出了解决方法。

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

It works by performing the search twice, where the search phrase for the second search is the original search phrase concatenated with the few most highly relevant documents from the first search. Thus, if one of these documents contains the word “databases” and the word “MySQL”, the second search finds the documents that contain the word “MySQL” even if they do not contain the word “database”

关于php - 将用户输入的标题与类别匹配 - 大型 INNODB 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17741117/

相关文章:

php - 如何修复mysql子查询显示

node.js - MongoDb 全文搜索和条件

javascript - OnClick 按钮从数据库获取并实时显示在输入字段上

php - SQL 比 PHP 设置的时区晚 8 小时

php - PHP + MySQL 中的递归逻辑

mysql - 更新sphinx索引属性后如何更新mysql

php - mysql全文搜索不适用于3个字符

PHP 注册表单验证

php - 尝试将登录页面从 mysql_connect 更改为使用 PDO,但没有成功

mysql - SQL更新自动化