Loading src/main/java/es/redmic/api/privatedata/repository/GeoFixedObservationSeriesESRepository.java +87 −5 Original line number Diff line number Diff line package es.redmic.api.privatedata.repository; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.lucene.search.join.ScoreMode; import org.elasticsearch.index.query.BoolQueryBuilder; import org.elasticsearch.index.query.InnerHitBuilder; import org.elasticsearch.index.query.NestedQueryBuilder; import org.elasticsearch.index.query.QueryBuilder; import org.elasticsearch.index.query.QueryBuilders; import org.locationtech.jts.geom.Geometry; import org.springframework.beans.factory.annotation.Value; /*- * #%L * API Loading @@ -23,23 +36,35 @@ package es.redmic.api.privatedata.repository; import org.springframework.stereotype.Repository; import es.redmic.es.common.queryFactory.geodata.GeoFixedTimeSeriesQueryUtils; import es.redmic.es.geodata.geofixedstation.repository.GeoFixedBaseESRepository; import es.redmic.es.geodata.common.repository.RGeoDataESRepository; import es.redmic.models.es.common.request.dto.CategoryPathInfo; import es.redmic.models.es.geojson.common.model.GeoPointData; import es.redmic.models.es.geojson.common.model.GeoSearchWrapper; import es.redmic.models.es.geojson.properties.model.GeoDataProperties; @Repository public class GeoFixedObservationSeriesESRepository extends GeoFixedBaseESRepository<GeoPointData> { public class GeoFixedObservationSeriesESRepository extends RGeoDataESRepository<GeoPointData> { protected static String[] PRIVATE_INDEX = { "private_geodata" }; protected static String[] INDEX = { "private_geodata" }; protected static String TYPE = "_doc"; @Value("${controller.mapping.DEVICE}") private String DEVICE_TARGET; @Value("${controller.mapping.PARAMETER}") private String PARAMETER_TARGET; @Value("${controller.mapping.UNIT}") private String UNIT_TARGET; public GeoFixedObservationSeriesESRepository() { super(PRIVATE_INDEX, TYPE); super(INDEX, TYPE); setInternalQuery(GeoFixedTimeSeriesQueryUtils.INTERNAL_QUERY); } @Override public String[] getIndex() { return PRIVATE_INDEX; return INDEX; } @Override Loading @@ -51,4 +76,61 @@ public class GeoFixedObservationSeriesESRepository extends GeoFixedBaseESReposit protected String getMappingFilePath(String index, String type) { return MAPPING_BASE_PATH + "private/geodata" + MAPPING_FILE_EXTENSION; } @SuppressWarnings("unchecked") public <T extends Geometry> GeoSearchWrapper<GeoDataProperties, T> findByDataDefinition(Long dataDefinitionId) { NestedQueryBuilder filterBuilder = QueryBuilders.nestedQuery("properties.measurements", QueryBuilders.termQuery("properties.measurements.dataDefinition.id", dataDefinitionId), ScoreMode.Avg) .innerHit(new InnerHitBuilder()); return (GeoSearchWrapper<GeoDataProperties, T>) findBy(QueryBuilders.boolQuery().filter(filterBuilder)); } /* * Función que sobrescribe a getTermQuery de RElasticSearchRepository para * añadir implementación específica para crear una query a apartir de una serie * de términos obtenidos por el controlador. */ @SuppressWarnings("unchecked") @Override public QueryBuilder getTermQuery(Map<String, Object> terms, BoolQueryBuilder query) { if (terms.containsKey("ids")) { List<String> ids = (List<String>) (List<?>) terms.get("ids"); query.must(QueryBuilders.nestedQuery("properties.measurements", QueryBuilders.termsQuery("properties.measurements.parameter.path.hierarchy", ids), ScoreMode.Avg)); } return super.getTermQuery(terms, query); } @Override protected String[] getDefaultSearchFields() { return new String[] { "properties.site.name.suggest" }; } @Override protected String[] getDefaultHighlightFields() { return new String[] { "properties.site.name.suggest" }; } @Override protected String[] getDefaultSuggestFields() { return new String[] { "properties.site.name" }; } @Override public HashMap<String, CategoryPathInfo> getCategoriesPaths() { // TODO: usar el diccionario de dto a model cuando esté implementado HashMap<String, CategoryPathInfo> categoriesPaths = new HashMap<>(); categoriesPaths.put("properties.measurements.dataDefinition.device.id", new CategoryPathInfo( "properties.measurements.dataDefinition.device.id", "properties.measurements", DEVICE_TARGET)); categoriesPaths.put("properties.measurements.parameter.id", new CategoryPathInfo( "properties.measurements.parameter.id", "properties.measurements", PARAMETER_TARGET)); categoriesPaths.put("properties.measurements.unit.id", new CategoryPathInfo("properties.measurements.unit.id", "properties.measurements", UNIT_TARGET)); return categoriesPaths; } } Loading
src/main/java/es/redmic/api/privatedata/repository/GeoFixedObservationSeriesESRepository.java +87 −5 Original line number Diff line number Diff line package es.redmic.api.privatedata.repository; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.lucene.search.join.ScoreMode; import org.elasticsearch.index.query.BoolQueryBuilder; import org.elasticsearch.index.query.InnerHitBuilder; import org.elasticsearch.index.query.NestedQueryBuilder; import org.elasticsearch.index.query.QueryBuilder; import org.elasticsearch.index.query.QueryBuilders; import org.locationtech.jts.geom.Geometry; import org.springframework.beans.factory.annotation.Value; /*- * #%L * API Loading @@ -23,23 +36,35 @@ package es.redmic.api.privatedata.repository; import org.springframework.stereotype.Repository; import es.redmic.es.common.queryFactory.geodata.GeoFixedTimeSeriesQueryUtils; import es.redmic.es.geodata.geofixedstation.repository.GeoFixedBaseESRepository; import es.redmic.es.geodata.common.repository.RGeoDataESRepository; import es.redmic.models.es.common.request.dto.CategoryPathInfo; import es.redmic.models.es.geojson.common.model.GeoPointData; import es.redmic.models.es.geojson.common.model.GeoSearchWrapper; import es.redmic.models.es.geojson.properties.model.GeoDataProperties; @Repository public class GeoFixedObservationSeriesESRepository extends GeoFixedBaseESRepository<GeoPointData> { public class GeoFixedObservationSeriesESRepository extends RGeoDataESRepository<GeoPointData> { protected static String[] PRIVATE_INDEX = { "private_geodata" }; protected static String[] INDEX = { "private_geodata" }; protected static String TYPE = "_doc"; @Value("${controller.mapping.DEVICE}") private String DEVICE_TARGET; @Value("${controller.mapping.PARAMETER}") private String PARAMETER_TARGET; @Value("${controller.mapping.UNIT}") private String UNIT_TARGET; public GeoFixedObservationSeriesESRepository() { super(PRIVATE_INDEX, TYPE); super(INDEX, TYPE); setInternalQuery(GeoFixedTimeSeriesQueryUtils.INTERNAL_QUERY); } @Override public String[] getIndex() { return PRIVATE_INDEX; return INDEX; } @Override Loading @@ -51,4 +76,61 @@ public class GeoFixedObservationSeriesESRepository extends GeoFixedBaseESReposit protected String getMappingFilePath(String index, String type) { return MAPPING_BASE_PATH + "private/geodata" + MAPPING_FILE_EXTENSION; } @SuppressWarnings("unchecked") public <T extends Geometry> GeoSearchWrapper<GeoDataProperties, T> findByDataDefinition(Long dataDefinitionId) { NestedQueryBuilder filterBuilder = QueryBuilders.nestedQuery("properties.measurements", QueryBuilders.termQuery("properties.measurements.dataDefinition.id", dataDefinitionId), ScoreMode.Avg) .innerHit(new InnerHitBuilder()); return (GeoSearchWrapper<GeoDataProperties, T>) findBy(QueryBuilders.boolQuery().filter(filterBuilder)); } /* * Función que sobrescribe a getTermQuery de RElasticSearchRepository para * añadir implementación específica para crear una query a apartir de una serie * de términos obtenidos por el controlador. */ @SuppressWarnings("unchecked") @Override public QueryBuilder getTermQuery(Map<String, Object> terms, BoolQueryBuilder query) { if (terms.containsKey("ids")) { List<String> ids = (List<String>) (List<?>) terms.get("ids"); query.must(QueryBuilders.nestedQuery("properties.measurements", QueryBuilders.termsQuery("properties.measurements.parameter.path.hierarchy", ids), ScoreMode.Avg)); } return super.getTermQuery(terms, query); } @Override protected String[] getDefaultSearchFields() { return new String[] { "properties.site.name.suggest" }; } @Override protected String[] getDefaultHighlightFields() { return new String[] { "properties.site.name.suggest" }; } @Override protected String[] getDefaultSuggestFields() { return new String[] { "properties.site.name" }; } @Override public HashMap<String, CategoryPathInfo> getCategoriesPaths() { // TODO: usar el diccionario de dto a model cuando esté implementado HashMap<String, CategoryPathInfo> categoriesPaths = new HashMap<>(); categoriesPaths.put("properties.measurements.dataDefinition.device.id", new CategoryPathInfo( "properties.measurements.dataDefinition.device.id", "properties.measurements", DEVICE_TARGET)); categoriesPaths.put("properties.measurements.parameter.id", new CategoryPathInfo( "properties.measurements.parameter.id", "properties.measurements", PARAMETER_TARGET)); categoriesPaths.put("properties.measurements.unit.id", new CategoryPathInfo("properties.measurements.unit.id", "properties.measurements", UNIT_TARGET)); return categoriesPaths; } }