我们有一个大约 250TrieIntField
秒的 Solr 核心(声明为dynamicField
)。我们的 Solr 索引中有大约 1400 万个文档,许多文档在其中许多领域都具有一定的价值。我们需要在一段时间内对所有这 250 个字段进行排序。
我们面临的问题是底层的 lucenefieldCache
很快就会被填满。我们有一个 4 GB 的盒子,索引大小为 18 GB。在对这些动态字段中的 40 或 45 个进行排序后,内存消耗约为 90%,并且我们开始出现 OutOfMemory 错误。
目前,如果消耗的总内存超过 80%,我们每分钟都会运行一个 cron 作业来重新启动 tomcat。
根据我的阅读,我了解到限制可排序 Solr 字段上不同值的数量会缩小fieldCache
空间。这些可排序字段中的值可以是 0 到 33000 之间的任何整数,并且分布非常广泛。我们考虑了一些扩展解决方案,但是处理整个问题的最佳方法是什么?
更新:我们想而不是排序,如果我们确实提升它不会去 fieldCache。因此,而不是发出类似的查询
select?q=name:alba&sort=relevance_11 desc
我们尝试了
select?q={!boost relevance_11}name:alba
但不幸的是,提升也填充了字段缓存:(