(improvement)(Headless) Remove redundant datasetName in e MetaDiscovery interface (#993)

This commit is contained in:
LXW
2024-05-14 17:14:43 +08:00
committed by GitHub
parent e0d45a77ce
commit 5e3cc89da6
4 changed files with 26 additions and 11 deletions

View File

@@ -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<String> similarTerms;
private List<String> similarTerms = Lists.newArrayList();
}

View File

@@ -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<String, DataSetMapInfo> dataSetMapInfo;
private Map<String, DataSetMapInfo> dataSetMapInfo = new HashMap<>();
private Map<String, List<Term>> terms;
private Map<String, List<Term>> terms = new HashMap<>();
}

View File

@@ -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,

View File

@@ -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<Long> 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<Long> dataSetIds) {
MapInfoResp mapInfoResp = new MapInfoResp();
if (Objects.isNull(mapResp)) {
return mapInfoResp;
}
BeanUtils.copyProperties(mapResp, mapInfoResp);
Set<Long> dataSetIds = mapResp.getMapInfo().getDataSetElementMatches().keySet();
MetaFilter metaFilter = new MetaFilter();
metaFilter.setIds(new ArrayList<>(dataSetIds));
List<DataSetResp> 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<Long, List<SchemaElementMatch>> entry : mapInfo.getDataSetElementMatches().entrySet()) {
Long dataSetId = entry.getKey();
List<SchemaElementMatch> 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<SchemaElementMatch> dimensions = semanticSchema.getDimensions(dataSetId)
.stream().sorted(Comparator.comparing(SchemaElement::getUseCnt).reversed())