gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 23:43:43 25 4
gpt4 key购买 nike

我有一个关于将过滤器键传递给脚本语言的快速问题。
基本上,我已经将过滤器定义如下,在我的脚本查询中,我想使用过滤器键月份作为 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com