Commit e46c5c9e authored by Noel Alonso's avatar Noel Alonso
Browse files

Calcula estadísticas a partir de los agregados

Si se calculan las estadísticas de los datos brutos, en algunos casos
puede dar unos límites que no corresponden (máximos mucho mayor que la
media). Para evitar esto, se calculan las estadísticas de los datos
agregados.
parent fa600743
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -31,7 +31,7 @@
		<!-- Añadir versión de la librería del tipo de vista elegida (elasticsearch/postgresql) -->
		<redmic.view-lib.version>0.9.0</redmic.view-lib.version>

		<redmic.time-series-lib.version>0.1.0</redmic.time-series-lib.version>
		<redmic.time-series-lib.version>0.2.0</redmic.time-series-lib.version>

		<!-- Versions of the OTHERS library used in the children -->
		<ma.glasnost.orika.core.version>1.5.2</ma.glasnost.orika.core.version>
+10 −2
Original line number Diff line number Diff line
@@ -37,9 +37,17 @@ public class WindRoseDataConverter extends CustomConverter<Aggregations, WindRos
		
		partitionNumber = (Integer) mappingContext.getProperty("partitionNumber");
		
		System.out.println(source.getAttributes().toString());

		Integer count = (Integer) ElasticSearchUtils.getMapValue(source.getAttributes(),
				"filter#dataDefinitionFilter").get("doc_count");
		
		StatsDTO stats = (StatsDTO) ElasticSearchUtils.getStatsFromAggregation(
				ElasticSearchUtils.getMapValue(source.getAttributes(), "filter#dataDefinitionFilter"),
					"stats#speed_stats", StatsDTO.class);
				source.getAttributes(),
					"stats_bucket#stats-buckets", StatsDTO.class);
		
		// Sobrescribe count para tener en cuenta todos los datos
		stats.setCount(count);
		
		List<Map<String, Object>> values = (List<Map<String, Object>>) 
				(ElasticSearchUtils.getMapValue(source.getAttributes(), "date_histogram#avg_values_by_interval"))
+6 −2
Original line number Diff line number Diff line
@@ -14,6 +14,7 @@ import org.elasticsearch.search.aggregations.AggregationBuilder;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.BaseAggregationBuilder;
import org.elasticsearch.search.aggregations.bucket.histogram.DateHistogramInterval;
import org.elasticsearch.search.aggregations.pipeline.PipelineAggregatorBuilders;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

@@ -69,9 +70,12 @@ public class WindRoseESRepository extends RTimeSeriesESRepository<TimeSeries, Da

		TermsQueryBuilder speedTermQuery = QueryBuilders.termsQuery("dataDefinition", speedDataDefinitions);

		// Se consultan las estadísticas para crear los límites
		aggBuilders.add(PipelineAggregatorBuilders.statsBucket("stats-buckets",
				"avg_values_by_interval>speedDataDefinitionFilter>avg_speed"));

		// Se consulta el número de elementos total para las estadísticas
		aggBuilders.add(AggregationBuilders.filter("dataDefinitionFilter", speedTermQuery)
				.subAggregation(AggregationBuilders.stats("speed_stats").field(defaultField)));
				.subAggregation(AggregationBuilders.count("speed_count").field(defaultField)));

		// Desde el cliente se envía en ms y aquí se pasa a seg
		int timeInterval = (int) (Long.parseLong(aggs.get(2).getTerm()) / 1000);
+2 −2
Original line number Diff line number Diff line
@@ -232,7 +232,7 @@
		"min": 0.0,
		"max": 25.3,
		"count": 1211,
		"sum": 10344.25,
		"avg": 8.542
		"sum": 6083.883,
		"avg": 8.766
	}
}
 No newline at end of file
+2 −2
Original line number Diff line number Diff line
@@ -792,7 +792,7 @@
		"min": 0.0,
		"max": 25.3,
		"count": 1211,
		"sum": 10344.25,
		"avg": 8.542
		"sum": 6083.883,
		"avg": 8.766
	}
}
 No newline at end of file