我正在使用嵌套映射(下图),它代表一个“任务”,并且有一个“请求”的嵌套元素,可以在该任务中取得进展。
我正在尝试查找尚未取得进展的所有任务,即嵌套对象上“max”聚合为空的所有文档。这需要能够过滤聚合的结果 - 这就是我有点卡住的地方。
我可以按the aggregation的结果订购。但我找不到过滤的方法。 有这样的能力吗?
映射:
mapping = {
properties: {
'prefix' => {
type: "string",
store: true,
index: "not_analyzed"
},
'last_marker' => {
type: "string",
store: true,
index: "not_analyzed"
},
'start_time' => {
type: "date",
store: true,
index: "not_analyzed"
},
'end_time' => {
type: "date",
store: true,
index: "not_analyzed"
},
'obj_count' => {
type: "long",
store: true,
index: "not_analyzed"
},
'requests' => {
type: 'nested',
include_in_parent: true,
'properties' => {
'start_time' => {
type: "date",
store: true,
index: "not_analyzed"
},
'end_time' => {
type: "date",
store: true,
index: "not_analyzed"
},
'amz_req_id' => {
type: "string",
store: true,
index: "not_analyzed"
},
'last_marker' => {
type: "string",
store: true,
index: "not_analyzed"
}
}
}
}
}
按聚合查询排序(并查找过滤器...):
{
"size":0,
"aggs": {
"pending_prefix": {
"terms": {
"field": "prefix",
"order": {"max_date": "asc"},
"size":20000
},
"aggs": {
"max_date": {
"max": {
"field": "requests.end_time"
}
}
}
}
}
}
答案 0 :(得分:1)
就像SQL术语中的HAVING子句一样。目前的Elasticsearch版本无法实现。
在即将发布的2.0版本中,随着新引入的Pipeline Aggregation,它应该是可能的。
更多:https://www.elastic.co/blog/out-of-this-world-aggregations