我有一个大型的INNODB数据库,上面有200多万个产品。“products”表有以下字段: id、title、description、category。
还有一个名为'category‘的MyISAM表,其中包含网站上使用的所有类别的列表。它有以下字段: id、名称、关键字、parentid。
我的问题更多的是关于逻辑而不是代码,但我试图实现的是:
当用户在网站上列出一个新产品时,当他们输入描述时,它应该尝试确定将产品放入哪个类别(以良好的准确性)。
我最初尝试使用MySQL MATCH()将输入的标题与category表中的关键字列表进行匹配,但这并不准确。
一个更好的想法似乎是将用户输入的标题与数据库中已有产品的标题进行匹配,根据所在的类别对它们进行分组,然后按最大的组对它们进行排序。然而,在INNODB数据库上,我显然不能使用全文,而对于2mill项,我认为它无论如何都会相当慢?
你会怎么做--我想它需要类似于stackoverflow显示类似问题的方式。
发布于 2013-07-19 17:04:42
如果您在一台不错的服务器上运行,那么对两百万条记录建立全文索引是一个有效的选择。初始索引将需要一段时间,这是肯定的,但搜索应该是相当快的,MySQL可以接受。
从v5.6.4开始,InnoDB支持全文索引。您应该考虑升级。
如果不能升级,请参阅我建议解决方法的this previous answer of mine。
对于您的用例,您可能希望查看WITH QUERY EXPANSION选项:
它的工作原理是执行两次搜索,其中第二次搜索的搜索短语是与第一次搜索中几个高度相关的文档连接在一起的原始搜索短语。因此,如果其中一个文档包含单词“databases”和单词“MySQL”,则第二次搜索将查找包含单词“MySQL”的文档,即使这些文档不包含单词“database”
https://stackoverflow.com/questions/17741117
复制相似问题