| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- define([
- ],
- function () {
- 'use strict';
- function ElasticQueryBuilder() {
- }
- ElasticQueryBuilder.prototype.build = function(targets) {
- var query = {
- "aggs": {},
- "size": "$maxDataPoints"
- };
- var self = this;
- targets.forEach(function(target) {
- if (!target.hide) {
- query["aggs"][target.termKey + "_" + target.termValue] = {
- "filter": {
- "and": [
- self._buildRangeFilter(target),
- self._buildTermFilter(target)
- ]
- },
- "aggs": {
- "date_histogram": {
- "date_histogram": {
- "interval": target.interval || "$interval",
- "field": target.keyField,
- "min_doc_count": 0,
- },
- "aggs": {
- "stats": {
- "stats": {
- "field": target.valueField
- }
- }
- }
- }
- }
- };
- if (target.groupByField) {
- query["aggs"][target.termKey + "_" + target.termValue]["aggs"] = {
- "terms": {
- "terms": {
- "field": target.groupByField
- },
- "aggs": query["aggs"][target.termKey + "_" + target.termValue]["aggs"]
- }
- };
- }
- }
- });
- query = JSON.stringify(query);
- return query;
- };
- ElasticQueryBuilder.prototype._buildRangeFilter = function(target) {
- var filter = {"range":{}};
- filter["range"][target.keyField] = {
- "gte": "$rangeFrom",
- "lte": "$rangeTo"
- };
- return filter;
- };
- ElasticQueryBuilder.prototype._buildTermFilter = function(target) {
- var filter = {"term":{}};
- filter["term"][target.termKey] = target.termValue;
- return filter;
- };
- return ElasticQueryBuilder;
- });
|