From 5e3cc89da63678510ff66141823ca30df0209c6f Mon Sep 17 00:00:00 2001 From: LXW <1264174498@qq.com> Date: Tue, 14 May 2024 17:14:43 +0800 Subject: [PATCH] (improvement)(Headless) Remove redundant datasetName in e MetaDiscovery interface (#993) --- .../supersonic/headless/api/pojo/Term.java | 3 ++- .../api/pojo/response/MapInfoResp.java | 5 +++-- .../rest/api/ChatQueryApiController.java | 9 +++++++++ .../impl/MetaDiscoveryServiceImpl.java | 20 +++++++++++-------- 4 files changed, 26 insertions(+), 11 deletions(-) diff --git a/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/Term.java b/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/Term.java index 630e87377..959faccf0 100644 --- a/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/Term.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/Term.java @@ -1,5 +1,6 @@ package com.tencent.supersonic.headless.api.pojo; +import com.google.common.collect.Lists; import lombok.Data; import java.util.List; @@ -10,6 +11,6 @@ public class Term { private String description; - private List similarTerms; + private List similarTerms = Lists.newArrayList(); } 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 7a2f18479..ccc7cebac 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 @@ -3,6 +3,7 @@ package com.tencent.supersonic.headless.api.pojo.response; import com.tencent.supersonic.headless.api.pojo.Term; import lombok.Data; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -11,8 +12,8 @@ public class MapInfoResp { private String queryText; - private Map dataSetMapInfo; + private Map dataSetMapInfo = new HashMap<>(); - private Map> terms; + private Map> terms = new HashMap<>(); } diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/rest/api/ChatQueryApiController.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/rest/api/ChatQueryApiController.java index b9aa981bf..33dd8b303 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/rest/api/ChatQueryApiController.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/rest/api/ChatQueryApiController.java @@ -3,6 +3,7 @@ package com.tencent.supersonic.headless.server.rest.api; import com.tencent.supersonic.auth.api.authentication.utils.UserHolder; import com.tencent.supersonic.headless.api.pojo.request.ExecuteQueryReq; import com.tencent.supersonic.headless.api.pojo.request.QueryReq; +import com.tencent.supersonic.headless.api.pojo.response.MapResp; import com.tencent.supersonic.headless.server.service.ChatQueryService; import com.tencent.supersonic.headless.server.service.SearchService; import lombok.extern.slf4j.Slf4j; @@ -32,6 +33,14 @@ public class ChatQueryApiController { return searchService.search(queryReq); } + @PostMapping("/chat/map") + public MapResp map(@RequestBody QueryReq queryReq, + HttpServletRequest request, + HttpServletResponse response) { + queryReq.setUser(UserHolder.findUser(request, response)); + return chatQueryService.performMapping(queryReq); + } + @PostMapping("/chat/parse") public Object parse(@RequestBody QueryReq queryReq, HttpServletRequest request, 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 f43994568..3af0ec3c2 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 @@ -1,5 +1,6 @@ package com.tencent.supersonic.headless.server.service.impl; +import com.google.common.collect.Lists; import com.tencent.supersonic.common.pojo.enums.TimeDimensionEnum; import com.tencent.supersonic.headless.api.pojo.SchemaElement; import com.tencent.supersonic.headless.api.pojo.SchemaElementMatch; @@ -21,7 +22,6 @@ import com.tencent.supersonic.headless.server.service.DataSetService; import com.tencent.supersonic.headless.server.service.MetaDiscoveryService; import com.tencent.supersonic.headless.server.service.TermService; import org.apache.commons.collections4.CollectionUtils; -import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -61,16 +61,16 @@ public class MetaDiscoveryServiceImpl implements MetaDiscoveryService { Set dataSetIds = dataSets.stream().map(SchemaItem::getId).collect(Collectors.toSet()); queryReq.setDataSetIds(dataSetIds); MapResp mapResp = chatQueryService.performMapping(queryReq); - return convert(mapResp, queryMapReq.getTopN()); + dataSetIds.retainAll(mapResp.getMapInfo().getDataSetElementMatches().keySet()); + return convert(mapResp, queryMapReq.getTopN(), dataSetIds); } - private MapInfoResp convert(MapResp mapResp, Integer topN) { + private MapInfoResp convert(MapResp mapResp, Integer topN, Set dataSetIds) { MapInfoResp mapInfoResp = new MapInfoResp(); if (Objects.isNull(mapResp)) { return mapInfoResp; } BeanUtils.copyProperties(mapResp, mapInfoResp); - Set dataSetIds = mapResp.getMapInfo().getDataSetElementMatches().keySet(); MetaFilter metaFilter = new MetaFilter(); metaFilter.setIds(new ArrayList<>(dataSetIds)); List dataSetList = dataSetService.getDataSetList(metaFilter); @@ -92,9 +92,12 @@ public class MetaDiscoveryServiceImpl implements MetaDiscoveryService { if (dataSetResp == null) { continue; } + if (CollectionUtils.isEmpty(mapFields.get(dataSetId))) { + continue; + } DataSetMapInfo dataSetMapInfo = new DataSetMapInfo(); - dataSetMapInfo.setMapFields(mapFields.get(dataSetId)); - dataSetMapInfo.setTopFields(topFields.get(dataSetId)); + dataSetMapInfo.setMapFields(mapFields.getOrDefault(dataSetId, Lists.newArrayList())); + dataSetMapInfo.setTopFields(topFields.getOrDefault(dataSetId, Lists.newArrayList())); dataSetMapInfo.setName(dataSetResp.getName()); dataSetMapInfo.setDescription(dataSetResp.getDescription()); map.put(dataSetMapInfo.getName(), dataSetMapInfo); @@ -123,10 +126,11 @@ public class MetaDiscoveryServiceImpl implements MetaDiscoveryService { for (Map.Entry> entry : mapInfo.getDataSetElementMatches().entrySet()) { Long dataSetId = entry.getKey(); List values = entry.getValue(); - String dataSetName = dataSetMap.get(dataSetId).getName(); - if (StringUtils.isBlank(dataSetName) || CollectionUtils.isEmpty(values)) { + DataSetResp dataSetResp = dataSetMap.get(dataSetId); + if (dataSetResp == null || CollectionUtils.isEmpty(values)) { continue; } + String dataSetName = dataSetResp.getName(); //topN dimensions Set dimensions = semanticSchema.getDimensions(dataSetId) .stream().sorted(Comparator.comparing(SchemaElement::getUseCnt).reversed())