diff --git a/headless/chat/src/main/java/com/tencent/supersonic/headless/chat/mapper/KeywordMapper.java b/headless/chat/src/main/java/com/tencent/supersonic/headless/chat/mapper/KeywordMapper.java index 3fe87477f..cf804340b 100644 --- a/headless/chat/src/main/java/com/tencent/supersonic/headless/chat/mapper/KeywordMapper.java +++ b/headless/chat/src/main/java/com/tencent/supersonic/headless/chat/mapper/KeywordMapper.java @@ -1,10 +1,7 @@ package com.tencent.supersonic.headless.chat.mapper; import com.tencent.supersonic.common.util.ContextUtils; -import com.tencent.supersonic.headless.api.pojo.SchemaElement; -import com.tencent.supersonic.headless.api.pojo.SchemaElementMatch; -import com.tencent.supersonic.headless.api.pojo.SchemaElementType; -import com.tencent.supersonic.headless.api.pojo.SchemaMapInfo; +import com.tencent.supersonic.headless.api.pojo.*; import com.tencent.supersonic.headless.api.pojo.response.S2Term; import com.tencent.supersonic.headless.chat.ChatQueryContext; import com.tencent.supersonic.headless.chat.knowledge.DatabaseMapResult; @@ -54,7 +51,7 @@ public class KeywordMapper extends BaseMapper { } private void convertMapResultToMapInfo(List mapResults, - ChatQueryContext chatQueryContext, List terms) { + ChatQueryContext chatQueryContext, List terms) { if (CollectionUtils.isEmpty(mapResults)) { return; } @@ -90,13 +87,14 @@ public class KeywordMapper extends BaseMapper { .similarity(hanlpMapResult.getSimilarity()) .detectWord(hanlpMapResult.getDetectWord()).build(); // doDimValueAliasLogic 将维度值别名进行替换成真实维度值 - doDimValueAliasLogic(schemaElementMatch); + doDimValueAliasLogic(schemaElementMatch,chatQueryContext.getSemanticSchema().getDimensionValues()); addToSchemaMap(chatQueryContext.getMapInfo(), dataSetId, schemaElementMatch); } } } - private void doDimValueAliasLogic(SchemaElementMatch schemaElementMatch) { + private void doDimValueAliasLogic(SchemaElementMatch schemaElementMatch, + List dimensionValues) { SchemaElement element = schemaElementMatch.getElement(); if (SchemaElementType.VALUE.equals(element.getType())) { Long dimId = element.getId(); @@ -112,11 +110,23 @@ public class KeywordMapper extends BaseMapper { schemaElementMatch.setWord(wordTech); } } + SchemaElement dimensionValue = dimensionValues.stream() + .filter(dimValue -> dimId.equals(dimValue.getId())).findFirst().orElse(null); + if (dimensionValue != null) { + SchemaValueMap dimValue = + dimensionValue.getSchemaValueMaps().stream().filter(schemaValueMap -> { + return StringUtils.equals(schemaValueMap.getBizName(), word) + || schemaValueMap.getAlias().contains(word); + }).findFirst().orElse(null); + if (dimValue != null) { + schemaElementMatch.setWord(dimValue.getTechName()); + } + } } } private void convertMapResultToMapInfo(ChatQueryContext chatQueryContext, - List mapResults) { + List mapResults) { for (DatabaseMapResult match : mapResults) { SchemaElement schemaElement = match.getSchemaElement(); Set regElementSet = @@ -143,8 +153,8 @@ public class KeywordMapper extends BaseMapper { return new HashSet<>(); } return elements.stream().filter( - elementMatch -> SchemaElementType.METRIC.equals(elementMatch.getElement().getType()) - || SchemaElementType.DIMENSION.equals(elementMatch.getElement().getType())) + elementMatch -> SchemaElementType.METRIC.equals(elementMatch.getElement().getType()) + || SchemaElementType.DIMENSION.equals(elementMatch.getElement().getType())) .map(elementMatch -> elementMatch.getElement().getId()).collect(Collectors.toSet()); } } diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/DataSetSchemaBuilder.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/DataSetSchemaBuilder.java index 1e57e5f05..09369f277 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/DataSetSchemaBuilder.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/DataSetSchemaBuilder.java @@ -113,7 +113,7 @@ public class DataSetSchemaBuilder { if (dim.isTimeDimension()) { String timeFormat = String.valueOf(dim.getExt().get(DimensionConstants.DIMENSION_TIME_FORMAT)); - setDefaultTimeFormat(dimToAdd, dim.getTypeParams(), timeFormat); + setDefaultTimeFormat(dimToAdd, timeFormat); } dimensions.add(dimToAdd); } @@ -125,7 +125,13 @@ public class DataSetSchemaBuilder { for (DimSchemaResp dim : resp.getDimensions()) { Set dimValueAlias = new HashSet<>(); List dimValueMaps = dim.getDimValueMaps(); + List schemaValueMaps = new ArrayList<>(); if (!CollectionUtils.isEmpty(dimValueMaps)) { + for (DimValueMap dimValueMap : dimValueMaps) { + SchemaValueMap schemaValueMap = new SchemaValueMap(); + BeanUtils.copyProperties(dimValueMap, schemaValueMap); + schemaValueMaps.add(schemaValueMap); + } for (DimValueMap dimValueMap : dimValueMaps) { if (StringUtils.isNotEmpty(dimValueMap.getBizName())) { dimValueAlias.add(dimValueMap.getBizName()); @@ -138,7 +144,7 @@ public class DataSetSchemaBuilder { SchemaElement dimValueToAdd = SchemaElement.builder().dataSetId(resp.getId()) .dataSetName(resp.getName()).model(dim.getModelId()).id(dim.getId()) .name(dim.getName()).bizName(dim.getBizName()).type(SchemaElementType.VALUE) - .useCnt(dim.getUseCnt()) + .schemaValueMaps(schemaValueMaps).useCnt(dim.getUseCnt()) .alias(new ArrayList<>(Arrays.asList(dimValueAlias.toArray(new String[0])))) .isTag(dim.getIsTag()).description(dim.getDescription()).build(); dimensionValues.add(dimValueToAdd); @@ -193,7 +199,7 @@ public class DataSetSchemaBuilder { } private static void setDefaultTimeFormat(SchemaElement dimToAdd, - DimensionTimeTypeParams dimensionTimeTypeParams, String timeFormat) { + String timeFormat) { dimToAdd.getExtInfo().put(DimensionConstants.DIMENSION_TIME_FORMAT, timeFormat); } }