mirror of
https://github.com/tencentmusic/supersonic.git
synced 2025-12-11 03:58:14 +00:00
(improvement)(chat) Rename DrillDownDimensionProcessor to DimensionRecommendProcessor (#512)
Co-authored-by: jolunoluo
This commit is contained in:
@@ -20,7 +20,7 @@ import java.util.Set;
|
|||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* DrillDownDimensionProcessor obtains metric recommended dimensions
|
* DimensionRecommendProcessor obtains metric recommended dimensions
|
||||||
*/
|
*/
|
||||||
public class DimensionRecommendProcessor implements ExecuteResultProcessor {
|
public class DimensionRecommendProcessor implements ExecuteResultProcessor {
|
||||||
|
|
||||||
|
|||||||
@@ -1,73 +0,0 @@
|
|||||||
package com.tencent.supersonic.chat.processor.execute;
|
|
||||||
|
|
||||||
import com.tencent.supersonic.chat.api.pojo.ModelSchema;
|
|
||||||
import com.tencent.supersonic.chat.api.pojo.RelatedSchemaElement;
|
|
||||||
import com.tencent.supersonic.chat.api.pojo.SchemaElement;
|
|
||||||
import com.tencent.supersonic.chat.api.pojo.SemanticParseInfo;
|
|
||||||
import com.tencent.supersonic.chat.api.pojo.request.ExecuteQueryReq;
|
|
||||||
import com.tencent.supersonic.chat.api.pojo.response.QueryResult;
|
|
||||||
import com.tencent.supersonic.chat.service.SemanticService;
|
|
||||||
import com.tencent.supersonic.common.pojo.enums.QueryType;
|
|
||||||
import com.tencent.supersonic.common.util.ContextUtils;
|
|
||||||
import org.apache.commons.compress.utils.Lists;
|
|
||||||
import org.springframework.util.CollectionUtils;
|
|
||||||
|
|
||||||
import java.util.Comparator;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Objects;
|
|
||||||
import java.util.Optional;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* DrillDownDimensionProcessor obtains metric recommended dimensions based on setting
|
|
||||||
*/
|
|
||||||
public class DrillDownDimensionProcessor implements ExecuteResultProcessor {
|
|
||||||
|
|
||||||
private static final int recommend_dimension_size = 5;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void process(QueryResult queryResult, SemanticParseInfo semanticParseInfo, ExecuteQueryReq queryReq) {
|
|
||||||
if (!QueryType.METRIC.equals(semanticParseInfo.getQueryType())
|
|
||||||
|| CollectionUtils.isEmpty(semanticParseInfo.getMetrics())) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
SchemaElement element = semanticParseInfo.getMetrics().iterator().next();
|
|
||||||
List<SchemaElement> dimensionRecommend = getDimensions(element.getId(), element.getModel());
|
|
||||||
queryResult.setRecommendDimensions(dimensionRecommend);
|
|
||||||
}
|
|
||||||
|
|
||||||
private List<SchemaElement> getDimensions(Long metricId, Long modelId) {
|
|
||||||
SemanticService semanticService = ContextUtils.getBean(SemanticService.class);
|
|
||||||
ModelSchema modelSchema = semanticService.getModelSchema(modelId);
|
|
||||||
List<Long> drillDownDimensions = Lists.newArrayList();
|
|
||||||
Set<SchemaElement> metricElements = modelSchema.getMetrics();
|
|
||||||
if (!CollectionUtils.isEmpty(metricElements)) {
|
|
||||||
Optional<SchemaElement> metric = metricElements.stream().filter(schemaElement ->
|
|
||||||
metricId.equals(schemaElement.getId())
|
|
||||||
&& !CollectionUtils.isEmpty(schemaElement.getRelatedSchemaElements()))
|
|
||||||
.findFirst();
|
|
||||||
if (metric.isPresent()) {
|
|
||||||
drillDownDimensions = metric.get().getRelatedSchemaElements().stream()
|
|
||||||
.map(RelatedSchemaElement::getDimensionId).collect(Collectors.toList());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
final List<Long> drillDownDimensionsFinal = drillDownDimensions;
|
|
||||||
return modelSchema.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) {
|
|
||||||
if (Objects.isNull(dimension)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (!CollectionUtils.isEmpty(drillDownDimensions)) {
|
|
||||||
return drillDownDimensions.contains(dimension.getId());
|
|
||||||
}
|
|
||||||
return Objects.nonNull(dimension.getUseCnt());
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user