我有一个很大的INNODB数据库,上面有超过200万个产品。“products”表包含以下字段:id、title、description、category。
还有一个名为“category”的MyISAM表,其中包含网站上使用的所有类别的列表。它有以下字段:id、name、keywords、parentid。
我的问题更多的是关于逻辑,而不是代码,但我要实现的是:
当用户在网站上列出一个新产品时,当他们在输入描述时,应该设法找出该产品应归入哪一类(准确度很高)。
我最初尝试使用MySQL MATCH()将输入的标题与category表中的关键字列表进行匹配,但这远远不够准确。
一个更好的办法似乎是将用户输入的标题与数据库中已有产品的标题相匹配,按它们所属的类别对它们进行分组,然后按最大的组对它们进行排序。然而,在一个INNODB数据库上,我显然不能使用全文本,而且对于2个邮件,我认为它还是很慢的?
你会怎么做-我想这需要一个类似的方式,如何显示类似的stackoverflow问题?
最佳答案
如果您运行在一个像样的服务器上,那么200万条记录的全文索引是一个有效的选项。初始化索引需要一段时间,这是肯定的,但是搜索应该是相当快的,MySQL可以接受。
从v5.6.4开始,InnoDB支持全文索引。你应该考虑升级。
如果升级不是一个选项,请参见this previous answer of mine我建议的解决方法。
对于您的用例,您可能需要查看WITH QUERY EXPANSION
选项:
它的工作原理是执行两次搜索,其中第二次搜索的搜索短语是原始搜索短语,与第一次搜索中极为相关的少数文档连接在一起。因此,如果其中一个文档包含单词“databases”和单词“MySQL”,则第二个搜索将查找包含单词“MySQL”的文档,即使它们不包含单词“database”
关于php - 将用户输入的标题与类别匹配-大型INNODB数据库,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17741117/