如何在大型数据库中查找相似消息

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

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注