[improvement](knowledge) add dataSource filter sql for fillKnowledgeDimValue (#402)

Co-authored-by: kanedai <kanedai@tencent.com>
This commit is contained in:
daikon
2023-11-18 16:12:31 +08:00
committed by GitHub
parent f198ce1ef8
commit dd115f9d37
3 changed files with 31 additions and 13 deletions

View File

@@ -19,6 +19,7 @@ import com.tencent.supersonic.knowledge.dictionary.DictUpdateMode;
import com.tencent.supersonic.knowledge.dictionary.DimValue2DictCommand; import com.tencent.supersonic.knowledge.dictionary.DimValue2DictCommand;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
@@ -29,6 +30,7 @@ import java.util.stream.Collectors;
import com.tencent.supersonic.semantic.api.model.request.PageDimensionReq; import com.tencent.supersonic.semantic.api.model.request.PageDimensionReq;
import com.tencent.supersonic.semantic.api.model.response.DimensionResp; import com.tencent.supersonic.semantic.api.model.response.DimensionResp;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
@@ -139,20 +141,14 @@ public class DictMetaHelper {
ChatDefaultRichConfigResp chatDefaultConfig = ChatDefaultRichConfigResp chatDefaultConfig =
chaConfigRichDesc.getChatAggRichConfig().getChatDefaultConfig(); chaConfigRichDesc.getChatAggRichConfig().getChatDefaultConfig();
KnowledgeAdvancedConfig globalKnowledgeConfigAgg = chaConfigRichDesc.getChatAggRichConfig()
.getGlobalKnowledgeConfig();
List<KnowledgeInfoReq> knowledgeAggInfo = List<KnowledgeInfoReq> knowledgeAggInfo =
chaConfigRichDesc.getChatAggRichConfig().getKnowledgeInfos(); chaConfigRichDesc.getChatAggRichConfig().getKnowledgeInfos();
KnowledgeAdvancedConfig globalKnowledgeConfigDetail = chaConfigRichDesc.getChatDetailRichConfig()
.getGlobalKnowledgeConfig();
List<KnowledgeInfoReq> knowledgeDetailInfo = List<KnowledgeInfoReq> knowledgeDetailInfo =
chaConfigRichDesc.getChatDetailRichConfig().getKnowledgeInfos(); chaConfigRichDesc.getChatDetailRichConfig().getKnowledgeInfos();
fillKnowledgeDimValue(knowledgeDetailInfo, chatDefaultConfig, dimValueDOList, dimIdAndDescPair, fillKnowledgeDimValue(knowledgeDetailInfo, chatDefaultConfig, dimValueDOList, dimIdAndDescPair, modelId);
modelId, globalKnowledgeConfigDetail); fillKnowledgeDimValue(knowledgeAggInfo, chatDefaultConfig, dimValueDOList, dimIdAndDescPair, modelId);
fillKnowledgeDimValue(knowledgeAggInfo, chatDefaultConfig, dimValueDOList, dimIdAndDescPair,
modelId, globalKnowledgeConfigAgg);
} }
@@ -161,8 +157,9 @@ public class DictMetaHelper {
private void fillKnowledgeDimValue(List<KnowledgeInfoReq> knowledgeInfos, private void fillKnowledgeDimValue(List<KnowledgeInfoReq> knowledgeInfos,
ChatDefaultRichConfigResp chatDefaultConfig, ChatDefaultRichConfigResp chatDefaultConfig,
List<DimValueDO> dimValueDOList, List<DimValueDO> dimValueDOList,
Map<Long, SchemaElement> dimIdAndDescPair, Long modelId, Map<Long, SchemaElement> dimIdAndDescPair, Long modelId) {
KnowledgeAdvancedConfig globalKnowledgeConfigDetail) { Map<Long, DimensionResp> dimIdAndRespPair = queryDimensionRespByModelId(
new ArrayList<>(Arrays.asList(modelId)));
if (!CollectionUtils.isEmpty(knowledgeInfos)) { if (!CollectionUtils.isEmpty(knowledgeInfos)) {
List<Dim4Dict> dimensions = new ArrayList<>(); List<Dim4Dict> dimensions = new ArrayList<>();
List<DefaultMetric> defaultMetricDescList = new ArrayList<>(); List<DefaultMetric> defaultMetricDescList = new ArrayList<>();
@@ -202,9 +199,14 @@ public class DictMetaHelper {
= knowledgeInfo.getKnowledgeAdvancedConfig(); = knowledgeInfo.getKnowledgeAdvancedConfig();
BeanUtils.copyProperties(knowledgeAdvancedConfig, dim4Dict); BeanUtils.copyProperties(knowledgeAdvancedConfig, dim4Dict);
if (Objects.nonNull(globalKnowledgeConfigDetail) if (Objects.nonNull(dimIdAndRespPair)
&& !CollectionUtils.isEmpty(globalKnowledgeConfigDetail.getRuleList())) { && dimIdAndRespPair.containsKey(dim4Dict.getDimId())) {
dim4Dict.getRuleList().addAll(globalKnowledgeConfigDetail.getRuleList()); String datasourceFilterSql = dimIdAndRespPair.get(
dim4Dict.getDimId()).getDatasourceFilterSql();
if (StringUtils.isNotEmpty(datasourceFilterSql)) {
dim4Dict.getRuleList().add(datasourceFilterSql);
}
} }
} }
dimensions.add(dim4Dict); dimensions.add(dim4Dict);
@@ -221,6 +223,18 @@ public class DictMetaHelper {
} }
} }
private Map<Long, DimensionResp> queryDimensionRespByModelId(List<Long> modelIds) {
Map<Long, DimensionResp> dimIdAndRespPair = new HashMap<>();
PageDimensionReq pageDimensionCmd = new PageDimensionReq();
pageDimensionCmd.setModelIds(modelIds);
PageInfo<DimensionResp> dimensionPage = semanticInterpreter.getDimensionPage(pageDimensionCmd);
if (Objects.nonNull(dimensionPage) && !CollectionUtils.isEmpty(dimensionPage.getList())) {
List<DimensionResp> dimList = dimensionPage.getList();
dimIdAndRespPair = dimList.stream().collect(Collectors.toMap(DimensionResp::getId, v -> v, (v1, v2) -> v2));
}
return dimIdAndRespPair;
}
private String queryDataSourceByDimId(Long id) { private String queryDataSourceByDimId(Long id) {
PageDimensionReq pageDimensionCmd = new PageDimensionReq(); PageDimensionReq pageDimensionCmd = new PageDimensionReq();
pageDimensionCmd.setId(id.toString()); pageDimensionCmd.setId(id.toString());

View File

@@ -28,6 +28,8 @@ public class DimensionResp extends SchemaItem {
private String datasourceName; private String datasourceName;
private String datasourceBizName; private String datasourceBizName;
private String datasourceFilterSql;
//DATE ID CATEGORY //DATE ID CATEGORY
private String semanticType; private String semanticType;

View File

@@ -71,6 +71,8 @@ public class DimensionConverter {
if (dimensionDO.getDefaultValues() != null) { if (dimensionDO.getDefaultValues() != null) {
dimensionResp.setDefaultValues(JSONObject.parseObject(dimensionDO.getDefaultValues(), List.class)); dimensionResp.setDefaultValues(JSONObject.parseObject(dimensionDO.getDefaultValues(), List.class));
} }
dimensionResp.setDatasourceFilterSql(
datasourceRespMap.getOrDefault(dimensionResp.getDatasourceId(), new DatasourceResp()).getFilterSql());
if (Strings.isNotEmpty(dimensionDO.getDimValueMaps())) { if (Strings.isNotEmpty(dimensionDO.getDimValueMaps())) {
dimensionResp.setDimValueMaps(JsonUtil.toList(dimensionDO.getDimValueMaps(), DimValueMap.class)); dimensionResp.setDimValueMaps(JsonUtil.toList(dimensionDO.getDimValueMaps(), DimValueMap.class));
} }