1
過濾我有以下對象索引:彈性搜索聚合增強型嵌套查詢
{ "ProjectName" : "Project 1",
"Roles" : [
{ "RoleName" : "Role 1", "AddedAt" : "2015-08-14T17:11:31" },
{ "RoleName" : "Role 2", "AddedAt" : "2015-09-14T17:11:31" } ] }
{ "ProjectName" : "Project 2",
"Roles" : [
{ "RoleName" : "Role 1", "AddedAt" : "2015-10-14T17:11:31" } ] }
{ "ProjectName" : "Project 3",
"Roles" : [
{ "RoleName" : "Role 2", "AddedAt" : "2015-11-14T17:11:31" } ] }
即,添加的角色不同的項目清單,在不同的時間增加。 (角色列表是嵌套場)
我需要的是有聚集這將選擇多少項目按一定的作用存在,但只(!)如果角色加入在一定時期項目。
一個經典的查詢(無日期蘭德過濾)看起來是這樣的(而且效果很好):
{ // ... my main query here
"aggs" : {
"agg1" : {
"nested" : {
"path" : "Roles"
},
"aggs" : {
"agg2": {
"terms": {
"field" : "Roles.RoleName"
},
"aggs": {
"agg3":{
"reverse_nested": {}
}}}}}}
但這種方法是不是爲我工作,因爲如果我需要按日期過濾從假設開始'2015- -01','角色1'和'角色2'將被選作第一個項目(即他們的項目),因爲'角色1'將因爲'角色2'由於'角色2'添加了日期標準,因此項目命中。
所以,我認爲,我應該額外增加的地方以下條件:
"range": { "Roles.AddedAt": {
"gte": "2015-09-01T00:00:00",
"lte": "2015-12-02T23:59:59"
}}
但我不能找到一個正確的方式來做到這一點。
工作查詢的結果是(種)以下內容:
"aggregations": {
"agg1": {
"doc_count": 17,
"agg2": {
"buckets": [
{
"key": "Role 1",
"doc_count": 2,
"agg3": {
"doc_count": 2
}
},
{
"key": "Role 2",
"doc_count": 2,
"agg3": {
"doc_count": 2
}
},