【问题标题】:Filtering children by parent value in elasticsearch在elasticsearch中按父值过滤子项
【发布时间】:2016-04-13 16:50:45
【问题描述】:

我有一个包含三种文档类型的索引:

  • Lead - 拥有、ID 和类型(Account 的子级)
  • 帐户 - 有一个 ID
  • 付款 - have 和 id、type 和 account_id(Account 的子级)

他们都是亲子关系。 我想获取有关我拥有哪些潜在客户类型的统计信息(按类型分组),然后计算我拥有多少这种特定类型的付款。

我来到这个查询,但我无法按父类型过滤子聚合。 查询到Lead类型

{
  "query": {
    "match_all": {}
  },
  "aggs": {
    "by_type": {
      "terms": {
        "field": "type"
      },
      "aggs": {
        "payments_count": {
          "filter": {
            "and": [
              {
                "has_parent": {
                  "type": "account",
                  "query": {
                    "filtered": {
                      "query": {
                        "match_all": {}
                      },
                      "filter": {
                        "and": [
                          {
                            "has_child": {
                              "type": "payment",
                              "query": {
                                "filtered": {
                                  "query": {
                                    "match_all": {}
                                  },
                                  "filter": {
                                    "and": [
                                      {
                                        "term": {
                                          "type": ?????????
                                        }
                                      }
                                    ]
                                  }
                                }
                              }
                            }
                          }
                        ]
                      }
                    }
                  }
                }
              }
            ]
          }
        }
      }
    }
  }
}

在最后一个 has_child 过滤器中,我想知道如何通过其父级的lead.type 过滤子级,如下所示:

"filter": {
    "and": [
      {
        "term": {
          "type": "$lead.type"
        }
      }
    ]
}

另外,由于 lead 类型正在进行另一个聚合,我无法反转此查询。

任何帮助将不胜感激

【问题讨论】:

  • 您能否提供一些示例数据和预期结果,这样可以更容易有人提供帮助。

标签: elasticsearch


【解决方案1】:

您正在针对“lead”类型运行查询,因此如果您想过滤“lead.type”,您应该在进入其父级之前将其作为第一个过滤器聚合。

"payments_count": {
  "filter": {
    "and": [
     {
        "term": {
          "type": "$lead.type"
        }
     },
     {
       "has_parent": {
       ...

也许我的查询也有帮助,因为它有点相似:Term Filter on a nested field called id does not work as expected

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-06
    相关资源
    最近更新 更多