首页 文章

Solr分面搜索性能建议

提问于
浏览
5

我们有一个包含86,315,770个文档的solr实例 . 它使用高达4GB的内存,我们需要它在名为内容的标记化字段上进行分面 . 磁盘上的索引大小为23GB .

我们为什么要面对一个象征化的领域?因为我们想查询该字段上最常用的“n”个术语 . 问题是执行此类查询需要花费太长时间 . 有没有什么方法可以改善这样做的时间?有什么建议?

提前致谢 .

2 回答

  • 2

    由于Solr计算内存数据结构的方面,因此facet计算可能受CPU限制 . 计算facet的代码已经过高度优化(UnInvertedField中的 getCounts 方法用于多值字段) .

    一种想法是并行化计算 . 也许最简单的方法是将你的集合分成几个碎片,如Do multiple Solr shards on a single machine improve performance?中所述 .

    否则,如果您的术语词典足够小并且查询可以采用有限数量的表单,则可以设置一个不同的系统来维护每个(术语,查询)对的计数矩阵 . 例如,如果您只允许使用术语查询,则表示您应该维护每对术语的计数 . 请注意,这将需要大量磁盘空间,具体取决于术语和查询的总数 . 如果您不要求计数准确,那么最简单的方法可能是在批处理过程中计算这些计数 . 否则,保持与Solr同步的计数可能(可能,但是)有点棘手 .

  • 0

    您可以使用LukeRequestHandlertopTerms 功能 .

相关问题