通过第三个从一个索引到另一个索引进行聚合和过滤

Aggregate and filter from one index to another through a third

在我的 Elasticsearch 服务器上,我有三个索引:PersonArchiveDocument

使用上面的索引,我可以将文档聚合到归档桶中,并将归档聚合到所有者桶中。

我怎样才能将文档也包含在人员聚合中,以便如果我过滤特定的人,我会得到属于该人的档案和他们的文档,而不仅仅是档案?


这是我到目前为止过滤档案并将其聚合到所有者桶中的方法:

{
  "post_filter": {
    "terms": {
      "owner": [
        "my_owner_id"
      ]
    }
  },
  "aggs": {
    "_filter_archive": {
      "filter": {
        "terms": {
          "owner": [
            "my_owner_id"
          ]
        }
      },
      "aggs": {
        "archive": {
          "terms": {
            "field": "archive"
          }
        }
      }
    }
  }
}

这很难回答,因为您似乎遗漏了一些细节。简单的答案是:使用嵌套文档或父子关系。在您的情况下使用哪一个取决于很多因素。我的建议是同时尝试它们并进行测试。看看他们的表现如何。第三种选择是完全非规范化您的数据。这就是我询问更新的原因,它们有多频繁,Person 文档有多大,Archive 文档有多大等。如果您不准备回答这些问题,那么测试 nested 和 parent-child 并选择一个或其他。祝你好运!