这个问题是我上一个问题:Is child documents in solr anti-pattern?的后续问题。
我正在创建一个关于动态领域性能的新问题,因为我没有找到最近关于这个主题的任何相关文章,我觉得这值得在这里单独提出一个问题。
我知道动态字段被视为静态字段,而性能方面两者是相似的。
此外,根据我所读到的,就记忆而言,动态字段是无效的。假设一个文档有100个字段,另一个文档有1000个字段(集合中的最大字段数),则Apache将分配内存块来支持集合中所有文档的所有1000个字段。
我有一个要求,我有6-7个字段,可以是子文档的一部分,每个父文档可以有多达300个子文档。这意味着每个父文档都有~2000字段。
当文档中有这么多字段时,对查询的性能会有什么影响?
发布于 2019-07-27 17:49:00
这实际上取决于您想要对该字段做什么以及这些字段的定义是什么。使用docValues,解决了稀疏字段(即仅在文档总数中的一小部分中具有值的字段)的内存使用问题。
另外,您通常可以将这些动态字段重写到单个multiValued字段中,以进行筛选,而不是对每个字段进行过滤(例如,common_field:field_prefix_value,其中common_field包含要筛选的值,前缀为字段名/唯一字段id)。
无论如何,最后一种情况是,这将取决于您总共拥有多少文档。如果您只有1000个文档,这在任何方面都不会是一个问题。如果你有一百万,它曾经是-取决于你需要那些动态字段。如今,这真的不是一个问题,我会从天真的、直接的解决方案开始,看看这个解决方案是否适合您的用例。在不知道这些字段将包含什么、字段的用例是什么、它们将用于什么以及应用程序的查询概要文件的情况下,很难说。
如果需要的话,还可以考虑使用"side“索引,即使用来自主索引的重复数据的特殊索引来解决某些查询或查询要求。根据用例选择要搜索的索引,然后将适当的数据返回给用户。
https://stackoverflow.com/questions/57234522
复制相似问题