elasticsearch - 如何在 Elasticsearch DSL 查询中将父聚合键传递给子聚合无痛脚本?

标签 elasticsearch kibana elasticsearch-dsl

我有一个关于将过滤器键传递给脚本语言的快速问题。
基本上,我已经将过滤器定义如下,在我的脚本查询中,我想使用过滤器键月份作为 DOM 平均计算的一部分。在我的示例中,我硬编码了一个日期值,但它应该是过滤器定义的键值。如果你能给我一些关于如何解决这个问题的反馈,我将不胜感激。
Snippet of DSL query
这是完整的查询:

GET offmarketlistings,listings,soldlistings/_search
  {
  "size": 0,
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "isRental": {
              "value": false
            }
          }
        },
        {
          "terms": {
            "zip": [
              "20852",
              "20001",
              "20878"
            ]
          }
        },
        {
          "range": {
            "sqft": {
              "gte": 1500.0,
              "lte": 3500.0
            }
          }
        },
        {
          "range": {
            "bed": {
              "gte": 1.0,
              "lte": 7.0
            }
          }
        }
      ]
    }
  },
  "aggs": {
    "zip_bucket": {
      "terms": {
        "field": "zip"
      },
      "aggs": {
        "active_monthly_bucket": {
          "filters": {
            "filters": {
              "7/1/2020": {
                "bool": {
                  "must": [
                    {
                      "range": {
                        "listDate": {
                          "lt": "2020/08/01",
                          "format": "yyyy/MM/dd"
                        }
                      }
                    },
                    {
                      "bool": {
                        "should": [
                          {
                            "bool": {
                              "must_not": [
                                {
                                  "exists": {
                                    "field": "soldDate"
                                  }
                                }
                              ]
                            }
                          },
                          {
                            "bool": {
                              "must": [
                                {
                                  "exists": {
                                    "field": "soldDate"
                                  }
                                },
                                {
                                  "range": {
                                    "soldDate": {
                                      "gt": "2020/07/01",
                                      "format": "yyyy/MM/dd"
                                    }
                                  }
                                }
                              ]
                            }
                          }
                        ]
                      }
                    },
                    {
                      "bool": {
                        "should": [
                          {
                            "bool": {
                              "must_not": [
                                {
                                  "exists": {
                                    "field": "offMarketDate"
                                  }
                                }
                              ]
                            }
                          },
                          {
                            "bool": {
                              "must": [
                                {
                                  "exists": {
                                    "field": "offMarketDate"
                                  }
                                },
                                {
                                  "range": {
                                    "offMarketDate": {
                                      "gt": "2020/07/01",
                                      "format": "yyyy/MM/dd"
                                    }
                                  }
                                }
                              ]
                            }
                          }
                        ]
                      }
                    }
                  ]
                }
              },
              "9/1/2019": {
                "bool": {
                  "must": [
                    {
                      "range": {
                        "listDate": {
                          "lt": "2019/10/01",
                          "format": "yyyy/MM/dd"
                        }
                      }
                    },
                    {
                      "bool": {
                        "should": [
                          {
                            "bool": {
                              "must_not": [
                                {
                                  "exists": {
                                    "field": "soldDate"
                                  }
                                }
                              ]
                            }
                          },
                          {
                            "bool": {
                              "must": [
                                {
                                  "exists": {
                                    "field": "soldDate"
                                  }
                                },
                                {
                                  "range": {
                                    "soldDate": {
                                      "gt": "2019/09/01",
                                      "format": "yyyy/MM/dd"
                                    }
                                  }
                                }
                              ]
                            }
                          }
                        ]
                      }
                    },
                    {
                      "bool": {
                        "should": [
                          {
                            "bool": {
                              "must_not": [
                                {
                                  "exists": {
                                    "field": "offMarketDate"
                                  }
                                }
                              ]
                            }
                          },
                          {
                            "bool": {
                              "must": [
                                {
                                  "exists": {
                                    "field": "offMarketDate"
                                  }
                                },
                                {
                                  "range": {
                                    "offMarketDate": {
                                      "gt": "2019/09/01",
                                      "format": "yyyy/MM/dd"
                                    }
                                  }
                                }
                              ]
                            }
                          }
                        ]
                      }
                    }
                  ]
                }
              },
              "8/1/2019": {
                "bool": {
                  "must": [
                    {
                      "range": {
                        "listDate": {
                          "lt": "2019/09/01",
                          "format": "yyyy/MM/dd"
                        }
                      }
                    },
                    {
                      "bool": {
                        "should": [
                          {
                            "bool": {
                              "must_not": [
                                {
                                  "exists": {
                                    "field": "soldDate"
                                  }
                                }
                              ]
                            }
                          },
                          {
                            "bool": {
                              "must": [
                                {
                                  "exists": {
                                    "field": "soldDate"
                                  }
                                },
                                {
                                  "range": {
                                    "soldDate": {
                                      "gt": "2019/08/01",
                                      "format": "yyyy/MM/dd"
                                    }
                                  }
                                }
                              ]
                            }
                          }
                        ]
                      }
                    },
                    {
                      "bool": {
                        "should": [
                          {
                            "bool": {
                              "must_not": [
                                {
                                  "exists": {
                                    "field": "offMarketDate"
                                  }
                                }
                              ]
                            }
                          },
                          {
                            "bool": {
                              "must": [
                                {
                                  "exists": {
                                    "field": "offMarketDate"
                                  }
                                },
                                {
                                  "range": {
                                    "offMarketDate": {
                                      "gt": "2019/08/01",
                                      "format": "yyyy/MM/dd"
                                    }
                                  }
                                }
                              ]
                            }
                          }
                        ]
                      }
                    }
                  ]
                }
              }
            }
          },
          "aggs": {
            "listPrice_Stats": {
              "stats": {
                "field": "listPrice"
              }
            },
            "listPrice_median": {
              "percentiles": {
                "field": "listPrice",
                "percents": [
                  50.0
                ]
              }
            },
            "dom_stats": {
              "stats": {
                "script": {
                  "inline": "ChronoUnit.DAYS.between(ZonedDateTime.ofInstant(Instant.ofEpochMilli(doc['listDate'].value), ZoneId.of('Z')), ZonedDateTime.parse('2020-07-22T16:45:08Z'))"
                }
              }
            }
          }
        }
      }
    }
  }
}

最佳答案

脚本无权访问这些过滤器的名称。
然而,他们确实如此,support parameters .所以通常的做法是,当您使用您选择的语言构建查询时,您将那些“硬编码”值传递给 params脚本的一部分——作为键值对。这些值当然可以是数组(所有过滤器的键)。

关于elasticsearch - 如何在 Elasticsearch DSL 查询中将父聚合键传递给子聚合无痛脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63062752/

相关文章:

Elasticsearch 按所有者、我的与其他人分组方面

elasticsearch - 在 Kibana 上过滤方括号

elasticsearch - Elasticsearch 建议返回零结果

elasticsearch - 在Elasticsearch SimpleStringQuery中要求词组匹配

elasticsearch - Elasticsearch查找所有 'delivered'但不是 'opened'的消息

elasticsearch - 如何从同一filebeat到logstash的不同日志具有不同的索引名称

elasticsearch - Elasticsearch 查询空列表

elasticsearch - 使用Elasticsearch 1.7.5更新多个文档

kubernetes - 通过常见的Kibana UI监视来自多个Kubernetes集群的Pod日志(使用GCP和Kops)

elasticsearch - Kibana 未连接到 ElasticSearch