Solr 尝试通过Workbench群集15980个文档时出现java堆大小错误

Solr 尝试通过Workbench群集15980个文档时出现java堆大小错误,solr,cluster-analysis,k-means,workbench,carrot,Solr,Cluster Analysis,K Means,Workbench,Carrot,我的环境:8GB内存笔记本,带有Ubuntu 14.04、Solr 4.3.1、carrot2workbench 3.10.0 我的Solr索引:15980个文档 我的问题是:使用kmeans算法对所有文档进行聚类 当我在carrot2workbench(query::)中删除查询时,当使用超过1000个结果时,我总是得到一个Java堆大小错误。我用-Xms256m-Xmx6g启动Solr,但它仍然存在 这真的是一个堆大小问题还是其他地方的问题?您的怀疑是正确的,这是一个堆大小问题,或者更准确地

我的环境:8GB内存笔记本,带有Ubuntu 14.04、Solr 4.3.1、carrot2workbench 3.10.0

我的Solr索引:15980个文档

我的问题是:使用kmeans算法对所有文档进行聚类

当我在carrot2workbench(query::)中删除查询时,当使用超过1000个结果时,我总是得到一个Java堆大小错误。我用-Xms256m-Xmx6g启动Solr,但它仍然存在


这真的是一个堆大小问题还是其他地方的问题?

您的怀疑是正确的,这是一个堆大小问题,或者更准确地说,是一个可伸缩性约束。直接从胡萝卜2常见问题解答:

Carrot2集群如何根据文档的数量和长度进行扩展? 胡萝卜2算法最重要的特点是它们执行内存聚类。出于这个原因,根据经验,Carrot2应该能够成功地处理多达一千个文档,每个文档只有几段。对于设计用于处理数百万文档的算法,您可能需要查看Mahout项目

一位开发人员也在此处发布了相关信息:

虽然开发人员推荐Mahout,但这可能是一种方法,因为您不会像carrot2中那样受到内存中集群约束的约束,但是可能还有其他的可能性:

  • 如果您真的喜欢carrot2,但不一定需要k-means,那么您可以看看商业语言Lingo3G,基于“10万个片段的聚类时间”字段和(***)注释,它应该能够处理更多文档。还可以查看他们的常见问题解答条目“Lingo3G最多可以群集多少个文档?”

  • 尽量减小k-means正在执行聚类的标签的大小。不要对所有文档内容进行聚类,而是尝试对摘要/摘要进行聚类,或者提取重要关键字并对其进行聚类


  • 这看起来好像胡萝卜使用了很多对很多的记忆

    K-means不需要大量内存—每个文档一个整数

    因此,您应该能够在内存中的数百万个文档上运行k-means;即使在内存中有文档向量

    16k文档并不多,所以我不明白为什么您在实现良好的情况下会遇到麻烦。看来他们真的想让你买商业版来谋生!对我来说,去看象人似乎太过分了。我想,您的数据仍然可以存储在主内存中,所以不要浪费时间在网络上分发数据,因为网络的速度比内存慢一百万倍


    也许你可以自己实现k-means。这并不难…

    感谢您解决了1000个文档的k-means问题。这使我清楚地认识到这个问题。我正在同时研究Lingo3G和Lingo,所以这可能是我自己实现算法的主要途径。我会尝试在标签尺寸方面做一些调整。再次感谢!谢谢你的回答!这就是我的想法(16k不是很多),所以我将自己和其他算法的实现进行研究。问候语!