【发布时间】:2021-03-01 12:33:51
【问题描述】:
我在 ElasticSearch 中有以下映射
{
"properties":{
"Costs":{
"type":"nested",
"properties":{
"price":{
"type":"integer"
}
}
}
}
}
所以每个文档都有一个数组字段 Costs,其中包含许多元素,每个元素都有价格。我想找到最低和最高价格,条件是 - 从每个数组中应该考虑最低价格的元素。所以它基本上是每个数组的最小值中的最小值/最大值。
假设我有 2 个成本字段为的文档
Costs: [
{
"price": 100,
},
{
"price": 200,
}
]
和
Costs: [
{
"price": 300,
},
{
"price": 400,
}
]
所以我需要找到统计数据 这是我目前使用的查询
{
"costs_stats":{
"nested":{
"path":"Costs"
},
"aggs":{
"price_stats_new":{
"stats":{
"field":"Costs.price"
}
}
}
}
}
它给了我这个:
"min" : 100,
"max" : 400
但我需要在考虑每个数组的最小元素后找到统计信息。 所以这就是我需要的:
"min" : 100,
"max" : 300
就像我们在排序中有一个“模式”选项一样,统计数据聚合中是否也有类似的东西,或者任何其他实现这一点的方法,可能使用脚本或其他东西。请建议。我真的被困在这里了。
如果有什么需要请告诉我
更新 1:
查询最小值/最大值
{
"_source":false,
"timeout":"5s",
"from":0,
"size":0,
"aggs":{
"price_1":{
"terms":{
"field":"id"
},
"aggs":{
"price_2":{
"nested":{
"path":"Costs"
},
"aggs":{
"filtered":{
"aggs":{
"price_3":{
"min":{
"field":"Costs.price"
}
}
},
"filter":{
"bool":{
"filter":{
"range":{
"Costs.price":{
"gte":100
}
}
}
}
}
}
}
}
}
},
"minValue":{
"min_bucket":{
"buckets_path":"price_1>price_2>filtered>price_3"
}
}
}
}
只有几个桶来了,因此最小/最大值在其中,这是不正确的。有大小限制吗?
【问题讨论】:
标签: elasticsearch elastic-stack elasticsearch-aggregation elasticsearch-dsl