php - 如何在最大的数据库中查找相似的消息

标签 php mysql artificial-intelligence

我有一个包含 2.000.000 条消息的数据库。当用户收到一条消息时,我需要根据单词的出现在我的数据库中查找相关消息。

我曾尝试运行批处理来汇总我的数据库: 1 - 存储所有消息的所有单词(an、a、the、of、for...除外)。 2 - 在所有消息和其中包含的单词之间创建关联(我还存储了该单词在消息中出现的频率。)

然后,当我收到消息时: 1 - 我解析单词(看起来像是我批处理的第一步。) 2 - 在数据库中执行查询以获取按重合单词数排序的消息。

但是,更新我的词库的过程和获取相似消息的查询非常繁重和缓慢。对于 3000 字节的消息,字库更新持续约 1.2111 秒。对于相同大小的消息,查询类似消息持续约 9.8 秒。

数据库调优已经完成,代码运行良好。

我需要一个更好的算法来做到这一点。

有什么想法吗?

最佳答案

我建议使用设置 Apache Solr (http://lucene.apache.org/solr/)。设置和索引数百万个文档非常容易。 Solr 处理所有必要的优化(尽管它是开源的,因此您可以根据需要调整它)。

然后您可以使用可用的 API 进行查询,我更喜欢 Java API SolrJ (http://wiki.apache.org/solr/Solrj)。我通常会在一秒钟内看到返回的结果。

Solr 在文本索引方面通常优于 MySQL。

关于php - 如何在最大的数据库中查找相似的消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4902314/

相关文章:

php - 如何从表中选择全部并跳过具有特定值的某些行

php - 本地从浏览器静默打印 PDF 到特定打印机

php - 这是我的 laravel 项目中的一个额外的 ")",它为我查询 laravel

php - MYSQL 连接返回 Null 值

php - 如何查询和查看多个表中的记录

php - Active Records 在 CodeIgniter 中获取第二个表值

algorithm - 遗传算法中多个 child 的育种 parent

php - 如何从两个不同的表中获取 session 变量?

python - 值错误 : at least one array or dtype is required

algorithm - A* 启发式,高估/低估?