我有一个包含 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/