2014-11-06 65 views
-1

这里是我的样本文档:如何计算Elasticsearch中匹配文档的字段?

{ 
    "jobID": "ace4c888-1907-4021-a808-4a816e99aa2e", 
    "startTime": 1415255164835, 
    "endTime": 1415255164898, 
    "moduleCode": "STARTING_MODULE" 
} 
  • 我有成千上万的文件。
  • 我有一对文件相同的jobID和模块代码将是STARTING_MODULE和ENDING_MODULE。
  • 我的公式是ENDING_MODULE endTime减去STARTING_MODULE startTime等于模块处理所花费的时间。

我的问题是:我怎么总有小于假设28800000经过的时间所有的结果呢?

Elasticsearch有这样的结果吗?我想在Kibana中展示我的结果。

请让我知道这是否需要更多的澄清。谢谢!

回答

0

请尝试以下操作,可能并不理想,但会返回jobID和已用时间。首先我假设jobIDmoduleCodenot_analyzed

{ 
    "mappings": { 
    "jobs": { 
     "properties": { 
     "jobID":{ 
      "type": "string", 
      "index": "not_analyzed" 
     }, 
     "startTime":{ 
      "type": "date" 
     }, 
     "endTime":{ 
      "type": "date" 
     }, 
     "moduleCode":{ 
      "type": "string", 
      "index": "not_analyzed" 
     } 
     } 
    } 
    } 
} 

用于scripted_metric aggregation在ES 1.4.0可用于计算这两个值之间的差异。还没有研究如何添加过滤为“低于2880万”,但我希望可以有一些与该脚本进行限制这样的:

{ 
    "query": { 
    "match_all": {} 
    }, 
    "aggs": { 
    "jobIds": { 
     "terms": { 
     "field": "jobID" 
     }, 
     "aggs": { 
     "executionTimes": { 
      "scripted_metric": { 
      "init_script": "_agg['time'] = 0L", 
      "map_script": "if (doc['moduleCode'].value == \"STARTING_MODULE\") { _agg['time']=-1*doc['startTime'].value } else { _agg['time']=doc['endTime'].value}", 
      "combine_script": "execution = 0; for (t in _agg.time) { execution += t };return execution", 
      "reduce_script": "execution = 0; for (a in _aggs) { execution += a }; return execution" 
      } 
     } 
     } 
    } 
    } 
} 

而且结果应该是这样的:

"aggregations": { 
     "jobIds": { 
     "doc_count_error_upper_bound": 0, 
     "sum_other_doc_count": 0, 
     "buckets": [ 
      { 
       "key": "ace4c888-1907-4021-a808-4a816e99aa1e", 
       "doc_count": 2, 
       "executionTimes": { 
        "value": 1 
       } 
      }, 
      { 
       "key": "ace4c888-1907-4021-a808-4a816e99aa2e", 
       "doc_count": 2, 
       "executionTimes": { 
        "value": 1000201063 
       } 
      }, 
      { 
       "key": "ace4c888-1907-4021-a808-4a816e99aa3e", 
       "doc_count": 2, 
       "executionTimes": { 
        "value": 10000 
       } 
      } 
     ] 
     } 
    } 
相关问题