diff --git a/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/response/DataSetMapInfo.java b/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/response/DataSetMapInfo.java new file mode 100644 index 000000000..c4676f150 --- /dev/null +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/response/DataSetMapInfo.java @@ -0,0 +1,18 @@ +package com.tencent.supersonic.headless.api.pojo.response; + +import com.tencent.supersonic.headless.api.pojo.SchemaElementMatch; +import lombok.Data; +import java.util.List; + +@Data +public class DataSetMapInfo { + + private String name; + + private String description; + + private List mapFields; + + private List topFields; + +} diff --git a/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/response/MapInfoResp.java b/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/response/MapInfoResp.java index 833502106..7a2f18479 100644 --- a/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/response/MapInfoResp.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/response/MapInfoResp.java @@ -1,6 +1,5 @@ package com.tencent.supersonic.headless.api.pojo.response; -import com.tencent.supersonic.headless.api.pojo.SchemaElementMatch; import com.tencent.supersonic.headless.api.pojo.Term; import lombok.Data; @@ -12,9 +11,7 @@ public class MapInfoResp { private String queryText; - private Map> mapFields; - - private Map> topFields; + private Map dataSetMapInfo; private Map> terms; diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/MetaDiscoveryServiceImpl.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/MetaDiscoveryServiceImpl.java index 4fb9e3315..f43994568 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/MetaDiscoveryServiceImpl.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/MetaDiscoveryServiceImpl.java @@ -10,6 +10,7 @@ import com.tencent.supersonic.headless.api.pojo.SemanticSchema; import com.tencent.supersonic.headless.api.pojo.Term; import com.tencent.supersonic.headless.api.pojo.request.QueryMapReq; import com.tencent.supersonic.headless.api.pojo.request.QueryReq; +import com.tencent.supersonic.headless.api.pojo.response.DataSetMapInfo; import com.tencent.supersonic.headless.api.pojo.response.DataSetResp; import com.tencent.supersonic.headless.api.pojo.response.MapInfoResp; import com.tencent.supersonic.headless.api.pojo.response.MapResp; @@ -73,36 +74,56 @@ public class MetaDiscoveryServiceImpl implements MetaDiscoveryService { MetaFilter metaFilter = new MetaFilter(); metaFilter.setIds(new ArrayList<>(dataSetIds)); List dataSetList = dataSetService.getDataSetList(metaFilter); - Map dataSetMap = dataSetList.stream() - .collect(Collectors.toMap(DataSetResp::getId, DataSetResp::getName)); - mapInfoResp.setMapFields(getMapFields(mapResp.getMapInfo(), dataSetMap)); - mapInfoResp.setTopFields(getTopFields(topN, mapResp.getMapInfo(), dataSetMap)); + Map dataSetMap = dataSetList.stream() + .collect(Collectors.toMap(DataSetResp::getId, d -> d)); + mapInfoResp.setDataSetMapInfo(getDataSetInfo(mapResp.getMapInfo(), dataSetMap, topN)); mapInfoResp.setTerms(getTerms(dataSetList, dataSetMap)); return mapInfoResp; } - private Map> getMapFields(SchemaMapInfo mapInfo, - Map dataSetMap) { - Map> result = new HashMap<>(); + private Map getDataSetInfo(SchemaMapInfo mapInfo, + Map dataSetMap, + Integer topN) { + Map map = new HashMap<>(); + Map> mapFields = getMapFields(mapInfo, dataSetMap); + Map> topFields = getTopFields(topN, mapInfo, dataSetMap); + for (Long dataSetId : mapInfo.getDataSetElementMatches().keySet()) { + DataSetResp dataSetResp = dataSetMap.get(dataSetId); + if (dataSetResp == null) { + continue; + } + DataSetMapInfo dataSetMapInfo = new DataSetMapInfo(); + dataSetMapInfo.setMapFields(mapFields.get(dataSetId)); + dataSetMapInfo.setTopFields(topFields.get(dataSetId)); + dataSetMapInfo.setName(dataSetResp.getName()); + dataSetMapInfo.setDescription(dataSetResp.getDescription()); + map.put(dataSetMapInfo.getName(), dataSetMapInfo); + } + return map; + } + + private Map> getMapFields(SchemaMapInfo mapInfo, + Map dataSetMap) { + Map> result = new HashMap<>(); for (Map.Entry> entry : mapInfo.getDataSetElementMatches().entrySet()) { List values = entry.getValue(); if (CollectionUtils.isNotEmpty(values) && dataSetMap.containsKey(entry.getKey())) { - result.put(dataSetMap.get(entry.getKey()), values); + result.put(entry.getKey(), values); } } return result; } - private Map> getTopFields(Integer topN, + private Map> getTopFields(Integer topN, SchemaMapInfo mapInfo, - Map dataSetMap) { - Map> result = new HashMap<>(); + Map dataSetMap) { + Map> result = new HashMap<>(); SemanticSchema semanticSchema = semanticService.getSemanticSchema(); for (Map.Entry> entry : mapInfo.getDataSetElementMatches().entrySet()) { Long dataSetId = entry.getKey(); List values = entry.getValue(); - String dataSetName = dataSetMap.get(dataSetId); + String dataSetName = dataSetMap.get(dataSetId).getName(); if (StringUtils.isBlank(dataSetName) || CollectionUtils.isEmpty(values)) { continue; } @@ -120,19 +141,19 @@ public class MetaDiscoveryServiceImpl implements MetaDiscoveryService { .limit(topN).map(mergeFunction()).collect(Collectors.toSet()); dimensions.addAll(metrics); - result.put(dataSetName, new ArrayList<>(dimensions)); + result.put(dataSetId, new ArrayList<>(dimensions)); } return result; } - private Map> getTerms(List dataSets, Map dataSetNameMap) { + private Map> getTerms(List dataSets, Map dataSetNameMap) { Set domainIds = dataSets.stream().map(DataSetResp::getDomainId).collect(Collectors.toSet()); Map dataSetDomainIdMap = dataSets.stream() .collect(Collectors.toMap(DataSetResp::getId, DataSetResp::getDomainId)); Map> domainTermSetMap = termService.getTermSets(domainIds); Map> dataSetTermSetMap = new HashMap<>(); for (DataSetResp dataSet : dataSets) { - dataSetTermSetMap.put(dataSetNameMap.get(dataSet.getId()), + dataSetTermSetMap.put(dataSetNameMap.get(dataSet.getId()).getName(), domainTermSetMap.get(dataSetDomainIdMap.get(dataSet.getId()))); } return dataSetTermSetMap; diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/MetricServiceImpl.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/MetricServiceImpl.java index 99aa6c1e6..9a74b5a45 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/MetricServiceImpl.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/MetricServiceImpl.java @@ -37,6 +37,7 @@ import com.tencent.supersonic.headless.api.pojo.request.PageMetricReq; import com.tencent.supersonic.headless.api.pojo.request.QueryMapReq; import com.tencent.supersonic.headless.api.pojo.request.QueryMetricReq; import com.tencent.supersonic.headless.api.pojo.request.QueryStructReq; +import com.tencent.supersonic.headless.api.pojo.response.DataSetMapInfo; import com.tencent.supersonic.headless.api.pojo.response.DataSetResp; import com.tencent.supersonic.headless.api.pojo.response.DimensionResp; import com.tencent.supersonic.headless.api.pojo.response.MapInfoResp; @@ -292,11 +293,12 @@ public class MetricServiceImpl implements MetricService { queryMapReq.setUser(user); queryMapReq.setMapModeEnum(MapModeEnum.LOOSE); MapInfoResp mapMeta = metaDiscoveryService.getMapMeta(queryMapReq); - Map> mapFields = mapMeta.getMapFields(); - if (CollectionUtils.isEmpty(mapFields)) { + Map dataSetMapInfo = mapMeta.getDataSetMapInfo(); + if (CollectionUtils.isEmpty(dataSetMapInfo)) { return metricRespPageInfo; } - Map result = mapFields.values().stream() + Map result = dataSetMapInfo.values().stream() + .map(DataSetMapInfo::getMapFields) .flatMap(Collection::stream).filter(schemaElementMatch -> SchemaElementType.METRIC.equals(schemaElementMatch.getElement().getType())) .collect(Collectors.toMap(schemaElementMatch -> diff --git a/launchers/standalone/src/test/java/com/tencent/supersonic/headless/MetaDiscoveryTest.java b/launchers/standalone/src/test/java/com/tencent/supersonic/headless/MetaDiscoveryTest.java index ce12b5056..690d4be27 100644 --- a/launchers/standalone/src/test/java/com/tencent/supersonic/headless/MetaDiscoveryTest.java +++ b/launchers/standalone/src/test/java/com/tencent/supersonic/headless/MetaDiscoveryTest.java @@ -6,6 +6,7 @@ import com.tencent.supersonic.headless.api.pojo.request.QueryMapReq; import com.tencent.supersonic.headless.api.pojo.response.MapInfoResp; import com.tencent.supersonic.headless.server.service.MetaDiscoveryService; import org.junit.Assert; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -25,9 +26,9 @@ public class MetaDiscoveryTest extends BaseTest { queryMapReq.setDataSetNames(Collections.singletonList("超音数")); MapInfoResp mapMeta = metaDiscoveryService.getMapMeta(queryMapReq); - Assert.assertNotNull(mapMeta); - Assert.assertNotEquals(0, mapMeta.getMapFields()); - Assert.assertNotEquals(0, mapMeta.getTopFields()); + Assertions.assertNotNull(mapMeta); + Assertions.assertNotEquals(0, mapMeta.getDataSetMapInfo().get("超音数").getMapFields()); + Assertions.assertNotEquals(0, mapMeta.getDataSetMapInfo().get("超音数").getTopFields()); } @Test