2015-01-09 30 views
3

有没有办法将聚合存储桶的key值用作子聚合中的参数?从父聚合获取参数的子聚合脚本

,如被索引:

{ 
    "id": 152, 
    "description": "cool stuff", 
    "datesWithTotal" : [ 
     { 
      "date" : "2014-02-02T00:00:00", 
      "total" : 47.2 
     }, 
     { 
      "date" : "2014-02-03T00:00:00", 
      "total" : 51.2 
     }, 
     { 
      "date" : "2014-02-04T00:00:00", 
      "total" : 56.4 
     } 
    ] 
} 

我想用这将基于当前parentbucket.key

{ 
    "aggs": { 
     "histo": { 
      "date_histogram": { 
       "field": "datesWithTotal.date", 
       "interval": "1d" 
      }, 
      "aggs": { 
       "script-test": { 
        "scripted_metric": { 
         "init_script": "_agg['sum'] = 0", 
         "map_script": "_agg.sum += (PARENTBUCKET.KEY == 'somevalue' ? 1 : 0)", 
         "combine_script": "return _agg.sum" 
        } 
       } 
      } 
     } 
    } 
} 

我已经执行一些操作的子聚集执行date_histogram聚集已经以这种方式使用了一些脚本,但是每个脚本都没有使用父类中的任何内容,只是简单的整数参数。

回答

0

这只是一个ideea。我已经快速测试过它,但不管出于什么原因,都不是输出我认为应该的东西。也许它给你一些进一步的想法,或者你可以把它的方式工作,我一直没能到目前为止:

{ 
    "aggs": { 
    "histo": { 
     "date_histogram": { 
     "field": "datesWithTotal.date", 
     "interval": "1d" 
     }, 
     "aggs": { 
     "doesIncludeDate": { 
      "terms": { 
      "script": "new Date(doc[\"datesWithTotal.date\"].value).format(\"yyyy-MM-dd\")", 
      "valueType": "string", 
      "include": { 
       "pattern": "2014-02-04" 
      } 
      }, 
      "aggs": { 
      "script-test": { 
       "scripted_metric": { 
       "init_script": "_agg['sum'] = 0", 
       "map_script": "_agg.sum += 1", 
       "combine_script": "return _agg.sum" 
       } 
      } 
      } 
     }, 
     "doesNotIncludeDate": { 
      "terms": { 
      "script": "new Date(doc[\"datesWithTotal.date\"].value).format(\"yyyy-MM-dd\")", 
      "valueType": "string", 
      "exclude": { 
       "pattern": "2014-02-04" 
      } 
      }, 
      "aggs": { 
      "script-test": { 
       "scripted_metric": { 
       "init_script": "_agg['sum'] = 0", 
       "map_script": "_agg.sum += 0", 
       "combine_script": "return _agg.sum" 
       } 
      } 
      } 
     } 
     } 
    } 
    } 
} 

的想法是使用terms聚集与include和另一termsexclude要有与您的父桶密钥相匹配的桶。对于那些匹配使用_agg.sum += 1您的脚本为其他使用_agg.sum += 0

当然,所有这些都是针对您具有的特定脚本:日期为X或不是。如果脚本更复杂,它将不会有用。我不认为你可以从脚本访问父键(或者我还没有找到办法)。