(improvement)(Chat)Optimize dimension recommendation logic and code structure #1706 (#1826)

Co-authored-by: lxwcodemonkey
This commit is contained in:
LXW
2024-10-19 22:01:03 +08:00
committed by GitHub
parent 2250289c94
commit f196561d55

View File

@@ -8,16 +8,15 @@ import com.tencent.supersonic.common.util.ContextUtils;
import com.tencent.supersonic.headless.api.pojo.DataSetSchema; import com.tencent.supersonic.headless.api.pojo.DataSetSchema;
import com.tencent.supersonic.headless.api.pojo.RelatedSchemaElement; import com.tencent.supersonic.headless.api.pojo.RelatedSchemaElement;
import com.tencent.supersonic.headless.api.pojo.SchemaElement; import com.tencent.supersonic.headless.api.pojo.SchemaElement;
import com.tencent.supersonic.headless.api.pojo.SchemaElementType;
import com.tencent.supersonic.headless.api.pojo.SemanticParseInfo; import com.tencent.supersonic.headless.api.pojo.SemanticParseInfo;
import com.tencent.supersonic.headless.server.facade.service.SemanticLayerService; import com.tencent.supersonic.headless.server.facade.service.SemanticLayerService;
import org.springframework.util.CollectionUtils;
import java.util.Comparator; import java.util.Comparator;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.Optional; import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import org.springframework.util.CollectionUtils;
/** /**
* DimensionRecommendProcessor recommend some dimensions related to metrics based on configuration * DimensionRecommendProcessor recommend some dimensions related to metrics based on configuration
@@ -38,8 +37,7 @@ public class DimensionRecommendProcessor implements ExecuteResultProcessor {
if (!firstMetric.isPresent()) { if (!firstMetric.isPresent()) {
return; return;
} }
SchemaElement element = firstMetric.get(); List<SchemaElement> dimensionRecommended = getDimensions(firstMetric.get().getId(), dataSetId);
List<SchemaElement> dimensionRecommended = getDimensions(element.getId(), dataSetId);
queryResult.setRecommendedDimensions(dimensionRecommended); queryResult.setRecommendedDimensions(dimensionRecommended);
} }
@@ -49,23 +47,16 @@ public class DimensionRecommendProcessor implements ExecuteResultProcessor {
if (dataSetSchema == null) { if (dataSetSchema == null) {
return Lists.newArrayList(); return Lists.newArrayList();
} }
List<Long> drillDownDimensions = Lists.newArrayList(); SchemaElement metric = dataSetSchema.getElement(SchemaElementType.METRIC, metricId);
Set<SchemaElement> metricElements = dataSetSchema.getMetrics(); if (!CollectionUtils.isEmpty(metric.getRelatedSchemaElements())) {
if (!CollectionUtils.isEmpty(metricElements)) { List<Long> drillDownDimensions = metric.getRelatedSchemaElements().stream()
Optional<SchemaElement> metric = metricElements.stream() .map(RelatedSchemaElement::getDimensionId).collect(Collectors.toList());
.filter(schemaElement -> metricId.equals(schemaElement.getId()) return dataSetSchema.getDimensions().stream()
&& !CollectionUtils.isEmpty(schemaElement.getRelatedSchemaElements())) .filter(dim -> filterDimension(drillDownDimensions, dim))
.findFirst(); .sorted(Comparator.comparing(SchemaElement::getUseCnt).reversed())
if (metric.isPresent()) { .limit(recommend_dimension_size).collect(Collectors.toList());
drillDownDimensions = metric.get().getRelatedSchemaElements().stream()
.map(RelatedSchemaElement::getDimensionId).collect(Collectors.toList());
}
} }
final List<Long> drillDownDimensionsFinal = drillDownDimensions; return Lists.newArrayList();
return dataSetSchema.getDimensions().stream()
.filter(dim -> filterDimension(drillDownDimensionsFinal, dim))
.sorted(Comparator.comparing(SchemaElement::getUseCnt).reversed())
.limit(recommend_dimension_size).collect(Collectors.toList());
} }
private boolean filterDimension(List<Long> drillDownDimensions, SchemaElement dimension) { private boolean filterDimension(List<Long> drillDownDimensions, SchemaElement dimension) {