0
我想在聚合數據上運行後過濾器,但它不像我期望的那樣工作。有人可以查看我的查詢,並建議我在這裏做錯了什麼。彈性搜索子集聚後過濾器
"query" : {
"bool" : {
"must" : {
"range" : {
"versionDate" : {
"from" : null,
"to" : "2016-04-22T23:13:50.000Z",
"include_lower" : false,
"include_upper" : true
}
}
}
}
},
"aggregations" : {
"associations" : {
"terms" : {
"field" : "association.id",
"size" : 0,
"order" : {
"_term" : "asc"
}
},
"aggregations" : {
"top" : {
"top_hits" : {
"from" : 0,
"size" : 1,
"_source" : {
"includes" : [ ],
"excludes" : [ ]
},
"sort" : [ {
"versionDate" : {
"order" : "desc"
}
} ]
}
},
"disabledDate" : {
"filter" : {
"missing" : {
"field" : "disabledDate"
}
}
}
}
}
}
}
步驟在查詢:
- 通過indexDate過濾小於或等於給定的日期。
- 基於formId的聚合。每個formId形成桶。
- 按降序排序並返回每個存儲桶的最高命中結果。
- 運行排序subaggregation後subaggregation過濾器和桶,其中禁用的日期不爲空刪除所有文件。(這是不工作)
我有一個用例需要在計算聚合時考慮disabledDate!= null的文檔。一旦聚合完成,我想用所有的桶中的disabledDate!= null過濾所有文檔。所以我試圖在聚合完成後執行後過濾器,以返回缺少disabledDate的文檔,該文檔被禁用== null。 –
在聚合計算完成後,您無法從存儲桶中刪除任何**。使用查詢和過濾器,您只能決定將哪些文檔放入聚合管道中,但是一旦聚合計算完畢,您就無法修改這些存儲桶。 – Val
感謝您澄清疑問。我的用例是這樣的,當我在聚合桶上執行了tophit後,如果一個桶有一個disabledDate!= null的文檔,我不想從該桶中返回任何結果。考慮V1被禁用並且與給定時間最接近,它是返回作爲tophit。如果我執行後過濾器,則不應該從該桶中返回任何內容。這就是要求。但是,如果我在聚合之前過濾V1文檔,那麼可能會返回V2,這是距同一個存儲桶的給定時間的下一個最接近的文檔。我如何實現這一目標?我在SQL中得到了這個工作。 –