大量动态字段的Solr查询性能

时间:2019-07-27 17:29:12

标签: solr

此问题是我上一个问题的后续问题:Is child documents in solr anti-pattern?

我正在创建一个有关动态字段性能的新问题,因为我最近没有找到与此主题相关的任何帖子,并认为这里值得单独提出一个问题。

我知道,动态字段被视为静态字段,并且在性能方面都是相似的。

据我所读,就内存而言,动态字段效率不高。假设一个文档有100个字段,另一个文档有1000个字段(集合中最大字段数),Apache Solr将分配内存块以支持集合中所有文档的所有1000个字段。

我有一个要求,我必须有6-7个字段可以作为子文档的一部分,每个父文档最多可以有300个子文档。这意味着每个父文档可以有〜2000个字段。

当文档中包含大量字段时,对查询的性能会有什么影响?

1 个答案:

答案 0 :(得分:1)

这实际上取决于您想对字段做什么以及这些字段的定义。借助docValues,可以解决稀疏字段(即,仅在文档总数中只有少量值的字段)的内存使用问题的最新问题。

此外,您通常可以将这些动态字段重写为单个多值字段以进行过滤,而不是对每个字段进行过滤(即common_field:field_prefix_value,其中common_field包含要在带有字段前缀的情况下进行过滤的值名称/唯一字段ID)。

无论如何,最后一种情况是,这取决于您总共拥有多少个文档。如果您只有1000个文档,那么这绝对不是问题。如果您有一百万美元,过去通常是-取决于您需要这些动态字段的用途。如今,这的确不是问题,我从天真的直接解决方案开始,看看它是否适合您的用例。很难确切地说出这些字段将包含什么,这些字段的用例是什么,它们将用于什么以及应用程序的查询配置文件。

如果有必要,还可以考虑使用“ side car”索引,即特殊索引,其中包含来自主索引的重复数据,以解决某些查询或查询要求。您可以根据用例选择要搜索的索引,然后将适当的数据返回给用户。