ElasticSearch:按字段分组,术语“聚合”和“按最低价格聚合”
考虑冠词和变量组之间的一对一关系 在ElasticSearch中,每个文章文档都有一个“variationGroup”字段 我使用术语聚合按文章文档的“variationGroup”字段对结果进行分组。ElasticSearch:按字段分组,术语“聚合”和“按最低价格聚合”,
Warning: implode(): Invalid arguments passed in /data/phpspider/zhask/webroot/tpl/detail.html on line 45
,,考虑冠词和变量组之间的一对一关系 在ElasticSearch中,每个文章文档都有一个“variationGroup”字段 我使用术语聚合按文章文档的“variationGroup”字段对结果进行分组。 我使用TopHits子聚合来获取每个bucket的第一个文档 如何获得每个变体组的最低价格?如果我在术语聚合上使用最小子聚合,将对匹配查询的文档计算最低价格 我想得到所有文档的最低价格,这些文档可以分组在一个变体组中 例如,名为“星星T恤”的VariationGroup包含6篇文章。查询“red
我使用TopHits子聚合来获取每个bucket的第一个文档 如何获得每个变体组的最低价格?如果我在术语聚合上使用最小子聚合,将对匹配查询的文档计算最低价格 我想得到所有文档的最低价格,这些文档可以分组在一个变体组中 例如,名为“星星T恤”的VariationGroup包含6篇文章。查询“red Tshirt”返回这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
}
}
}
}
}
}
是的,这是因为聚合只应用于匹配的文档。您希望使用而不是普通的查询,这样您的聚合将在所有文档上运行,然后在最后只返回
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"
}
}
}
}
这可能是一个很好的答案,但并不是我想要的,因为每个文章文档都将在variationGroup字段上分组。我从top_文章聚合中获得结果,这就是为什么我为主查询指定了
“size”:0
。top\u article aggregation必须仅返回红色Tshirt
文档,而min\u price aggregation应返回variationGroup的min\u价格,而不管查询“red Tshirt”。我不认为我能在一次调用中做到这一点……好吧,我明白了,那么我要做的就是删除post\u filter
,并将top\u hits
包装在filter
聚合中,这样聚合在所有文档上运行,但是对于red Tshirt
,顶级点击只会返回,这对你有用吗?小错误:你应该在top_hits聚合中添加一个“name”,比如:“aggs”:{“top”:{“top_hits”:{“size”:1}}}}}
。这项工作做得很好,但有点太长,这是合乎逻辑的,因为每一篇文章都必须在VariationGroup上进行最小价格聚合。哎呀,对不起,我弄错了,我已经修好了。“太长”是什么意思?
{
"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
}
}
}
}
}
}
}
}