gpt4 book ai didi

elasticsearch - ElasticSearch:按字段分组,按术语汇总和最小价格汇总

转载 作者:行者123 更新时间:2023-12-02 22:50:30 24 4
gpt4 key购买 nike

考虑文章和变体组之间的一对多关系。

在ElasticSearch中,每个文章文档都有一个“variationGroup”字段。

我使用术语汇总将文章文档的字段“variationGroup”按结果分组。
我使用TopHits子聚合来获取每个存储桶的第一个文档。

如何获得每个变体组的最低价格?如果我在术语“汇总”上使用“最小”子汇总,则将在与查询匹配的文档上计算最低价格。

我想获得所有可以归入变体组的文档的最低价格。

例如,名为“带有星星的T恤”的VariationGroup包含6条。查询“红色T恤”返回这6篇文章中的2篇。
我想获得6篇文章的最低价格,而不仅是与查询匹配的2篇文章的最低价格。

在同一通话中甚至可能吗?

这是对应的json:

{
"query": {
"match": {
"name": "red Tshirt"
}
},
"size": 0,
"aggs": {
"variation_groups": {
"terms": {
"field": "variationGroup",
"size": 0
},
"aggs": {
"min_price": {
"min": {
"field": "price"
}
},
"max_price": {
"max": {
"field": "price"
}
},
"top_article": {
"top_hits": {
"size": 1
}
}
}
}
}
}

最佳答案

是的,这是因为汇总仅应用于匹配的文档。您想使用 post_filter 而不是普通查询,这样您的聚合将在所有文档上运行,然后最后只返回red Tshirt文档。

{
"aggs": {
"variation_groups": {
"terms": {
"field": "variationGroup",
"size": 0
},
"aggs": {
"min_price": {
"min": {
"field": "price"
}
},
"max_price": {
"max": {
"field": "price"
}
},
"top_article": {
"top_hits": {
"size": 1
}
}
}
}
},
"post_filter": { <---- move your query in a post_filter
"query": {
"match": {
"name": "red Tshirt"
}
}
}
}

更新

根据您的评论,我会这样做:
{
"size": 0,
"aggs": {
"variation_groups": {
"terms": {
"field": "variationGroup",
"size": 0
},
"aggs": {
"min_price": {
"min": {
"field": "price"
}
},
"max_price": {
"max": {
"field": "price"
}
},
"top_article": {
"filter": {
"query": {
"match": {
"name": "red Tshirt"
}
}
},
"aggs": {
"top_article": {
"top_hits": {
"size": 1
}
}
}
}
}
}
}
}

关于elasticsearch - ElasticSearch:按字段分组,按术语汇总和最小价格汇总,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33690723/

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