Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在最大的数据库中找到类似的消息_Php_Mysql_Artificial Intelligence - Fatal编程技术网

Php 如何在最大的数据库中找到类似的消息

Php 如何在最大的数据库中找到类似的消息,php,mysql,artificial-intelligence,Php,Mysql,Artificial Intelligence,我有一个包含2.000.000条消息的数据库。当用户收到消息时,我需要根据单词的出现情况在数据库中查找相关消息 我尝试运行批处理来汇总我的数据库: 1-存储所有消息的所有单词(an、a、the、of、for…)除外。 2-在所有消息和其中包含的单词之间创建关联(我还存储该单词在消息中出现的频率。) 然后,当我收到消息时: 1-我解析单词(看起来像是批处理过程的第一步。) 2-在数据库中执行查询以获取按重合字数排序的消息 然而,更新我的词库和获取类似消息的查询过程非常繁重和缓慢。对于3000字节的

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

相似性匹配仍然是一个特别复杂的领域,但您可以在MySQL参考中查看一下,特别是一些更复杂的示例


您应该可以运行一次性作业,为所有当前邮件构建一个相似性矩阵,然后每晚运行一次批处理,将新邮件添加到相似性矩阵中。

您不需要进行全文搜索吗?我强烈推荐《集体智慧》一书:。它是为Python编写的,但是有很多理论可以让您用另一种语言实现它。这本书的第一章涉及到你要做的事情,我刚刚下了命令,谢谢,我将执行一个测试,一个使用ApacheSolri的实现,每夜更新一次相似性矩阵。我将使用全文搜索执行一个实现的基准测试。谢谢